忍不住回两句。
先假定你是一个正经的想好好写代码的程序员而不是写完这个project就闪人的那种。
1. 首先,你应该搞清楚这个时间戳的格式而不是让网友帮你猜。
问同事是一个办法,自己去查代码也是一个办法。你们公司的代码应该都是能查的吧?
2. 既然知道这个时间戳的生成方式,那就可以查doc了:
https://docs.microsoft.com/en-us/dotnet/api/system.datetime?view=net-5.0
3. doc里并没有明确说明这个ToBinary()具体是怎么实现的,也就是说,实现方式是C#的内部细节。在这种情况下,C++是高概率不可能有一个现成的函数让你“方便”地转换的。
4. 如果我们假定C#的ToBinary()的实现是稳定的不会变的,那么这个问题还是可以解决的。你要做的是分析C#的内部实现细节,然后在C++里同样实现一遍即可。作为一个只有两个
field的简单类,它的实现细节不会太难。
5. C#的实现细节同样可以通过查文档找到:
https://referencesource.microsoft.com/#mscorlib/system/datetime.cs
以上就是一个正经的程序员解决问题的思路。
【 在 baoli (未来是什么) 的大作中提到: 】
: 标 题: Re: 请问c#保存的int64的时间戳,用C++获取这个值再转换成时间
: 发信站: 水木社区 (Sat Jul 24 18:50:48 2021), 站内
:
: 非常感谢!现在是这样,问了写C#时间戳的同事,原来这个时间戳是DateTime.ToBinary(),即把DateTime类的对象序列化为64位二进制值。保存在日志里。这个值在被C++提取出来,还能转换成时间格式吗?应该不行了吧,必须得用C#的DateTime.FromBinary()反序列化才能拿到时间吧。不知道用C++怎么处理这个64位值能拿到时间格式
:
: 【 在 Bernstein 的大作中提到: 】
: : 这俩时间的零点都不一致,当然不能互转
: : c++的时间零点是1970-01-01
: : c#里面,应该用目标时间戳 减去 1970-01-01对应的时间戳,得到一个和c++对应的时间戳
: : ...................
:
: --
:
: ※ 来源:·水木社区
http://www.mysmth.net·[FROM: 123.115.144.*]
--
FROM 76.126.252.*