Borland TDateTime 到 .NET DateTime 的转换
Borland TDateTime to .NET DateTime conversion
我有一个数字到日期的转换问题类似于
How to convert a double value to a DateTime in c#?
我拥有的时间日期信息是从 UDP 数据流中提取的 8 字节长。它被编码为 Borland C++ 中 TDateTime 对象的双精度值,它与 COM 日期时间兼容。
我正在 visual studio C# 中解码此数据流,并且任何转换为 DateTime 对象的日期都会出现奇怪的日期。
我认为 DateTime.FromBinary() 可能会成功,但这也不能正确解码 time/date。
两个系统之间 now() 的十六进制值差异很大:
Borland: 0x 40E4A17C20782C71
C# : 0x 8E6EA19D6CB5D288
这些值彼此相差几秒钟,但明显不同。
如果有人对如何转换它有任何建议,我将不胜感激!
BitConverter
(How to convert a byte array to double array in C#?) combined with DateTime.FromOADate
from (How to convert a double value to a DateTime in c#?) 就是你想要的:
var date = DateTime.FromOADate(BitConverter.ToDouble(
(new byte[]{0x40,0xE4,0xA1,0x7C,0x20,0x78,0x2C,0x71}).Reverse().ToArray(),
0));
注意 - 根据您读取字节的方式,您可能需要使用非 0 偏移量(如果您读取字节数组)并且可能不需要 Reverse
(可能取决于系统之间的字节顺序)。此外,根据您读取数据的方式,BinaryReader.ReadDouble
之类的内容可能是从传入二进制数据中获取 double
的更好选择。
我有一个数字到日期的转换问题类似于
How to convert a double value to a DateTime in c#?
我拥有的时间日期信息是从 UDP 数据流中提取的 8 字节长。它被编码为 Borland C++ 中 TDateTime 对象的双精度值,它与 COM 日期时间兼容。
我正在 visual studio C# 中解码此数据流,并且任何转换为 DateTime 对象的日期都会出现奇怪的日期。
我认为 DateTime.FromBinary() 可能会成功,但这也不能正确解码 time/date。
两个系统之间 now() 的十六进制值差异很大:
Borland: 0x 40E4A17C20782C71
C# : 0x 8E6EA19D6CB5D288
这些值彼此相差几秒钟,但明显不同。
如果有人对如何转换它有任何建议,我将不胜感激!
BitConverter
(How to convert a byte array to double array in C#?) combined with DateTime.FromOADate
from (How to convert a double value to a DateTime in c#?) 就是你想要的:
var date = DateTime.FromOADate(BitConverter.ToDouble(
(new byte[]{0x40,0xE4,0xA1,0x7C,0x20,0x78,0x2C,0x71}).Reverse().ToArray(),
0));
注意 - 根据您读取字节的方式,您可能需要使用非 0 偏移量(如果您读取字节数组)并且可能不需要 Reverse
(可能取决于系统之间的字节顺序)。此外,根据您读取数据的方式,BinaryReader.ReadDouble
之类的内容可能是从传入二进制数据中获取 double
的更好选择。