Borland TDateTime到.net DateTime的转换
本文关键字:转换 DateTime net TDateTime Borland | 更新日期: 2023-09-27 18:11:20
我有一个类似于
的数字到日期转换问题如何在c#中转换双精度值到日期时间?
我所拥有的时间信息是从UDP数据流中提取的8字节长。它被编码为来自Borland c++中的TDateTime对象的double,它与COM datetime具有兼容性。
我在visual studio c#中解码这个数据流,任何对DateTime对象的转换都会产生奇怪的日期。
我认为DateTime.FromBinary()可能会奏效,但这也不能正确解码时间/日期。
现在()的十六进制值在两个系统之间有很大的不同:
Borland: 0x 40E4A17C20782C71
C# : 0x 8E6EA19D6CB5D288
这些值彼此相隔几秒钟,但明显不同。
如果有人对如何转换这个有任何建议,我将不胜感激!
BitConverter
(如何在c#中将字节数组转换为双数组?)与DateTime.FromOADate
(如何在c#中将双值转换为日期时间?)相结合是您所追求的:
var date = DateTime.FromOADate(BitConverter.ToDouble(
(new byte[]{0x40,0xE4,0xA1,0x7C,0x20,0x78,0x2C,0x71}).Reverse().ToArray(),
0));
注意-根据你读取字节的方式,你可能需要使用非0偏移(如果你读取字节数组),可能不需要Reverse
(可能取决于系统之间的endianness)。还取决于您读取数据的方式,如BinaryReader.ReadDouble
可能是从传入的二进制数据中获得double
的更好选择。