【发布时间】:2018-07-16 05:31:17
【问题描述】:
我一直在尝试用 Java 读取二进制文件,二进制文件是用 C# 编写的。其中一些数据包含 DateTime 数据。
当将 DateTime 数据写入文件(二进制)时,在 C# 上使用DateTime.ToBinary();。
为了读取 DateTime 数据,它会首先使用 BitConverter.ToInt64(byte[], 0) 将字节转换为 long 数据,然后使用 DateTime.FromBinary(long) 将其再次从 long 转换为 DateTime 数据。 (所有这些都是用 C# 编写的)。
假设从字节转换后的长数据为= -8586803256090942249,将其转换为DateTime时,它将返回= 3/17/2018 5:07:56 PM
现在,我正在尝试使用 Java 读取该二进制文件。为了将字节数据转换为长数据,我使用了以下代码:ByteBuffer.wrap(byte[]).order(ByteOrder.LITTLE_ENDIAN).getLong()。
它将像 C# 一样返回精确的长数据值。但是,当我尝试使用 Date date = new Date(long) 将其从长数据转换为 Java 中的 DateTime 时,它将返回 = Sun May 06 19:04:17 WIB 272097407。
你能帮我解决这个问题的正确方法吗? Java 中的 C# 中的 DateTime.FromBinary() 是否有任何等价物?还是我的代码错了?非常感谢您的所有回答。
【问题讨论】:
-
在 Java 库中似乎没有
DateTime.FromBinary()的等价物。但是,使用DateTimeOffset.ToUnixTimeMilliseconds()并将其生成的值放入 Java 的Date()参数中听起来很有趣(因为 C#DateTime从0001/01/01开始,而 Java 的Date遵循 Unix 纪元格式,即从1970/01/01开始)。跨度> -
我可以做相反的事情吗?我的意思是可以用Java将长数据转换为从
0001/01/01开始的日期时间吗? -
2018 年 3 月 17 日下午 5:07:56 也是印度尼西亚西部时间吗?
-
@imbaglia C#部分也可以从Unix时间格式转换为
DateTime:DateTimeOffset.FromUnixTimeMilliseconds(millis).LocalDateTime。确保 Java 代码首先返回 Unix 纪元格式,然后在 C# 端使用该函数进行DateTime转换。 -
@OleV.V.是的 2018 年 3 月 17 日下午 5:07:56 也是印度尼西亚西部时间