繁体   English   中英

c#如何将日期时间转换为4个字节的字节数组

[英]c# how to convert a datetime to byte array of 4 bytes

我尝试将其转换为字节数组,但创建的最小字节数组为 5。 但是对于这个日期时间,我只有 4 个字节作为字节存储在我的字节数组中。

代码是这样的:

byte[] b = new byte[] {10,12,12,12};
DATETIME t=datetime.now();
array.copy(BitConverter.GetBytes(t.ticks),1,b,4);

但是getbytes(t.ticks)返回 8 个字节的数组。 我以某种方式希望它只转换为 4 个字节。

您可以使用 32 位 unix 时间。 但要小心 2038 年的问题。 您可以在下面找到示例解决方案。 以 4 个字节存储日期时间。

        byte[] b = new byte[] { 10, 12, 12, 12 };
        DateTime now = DateTime.Now;
        var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
        var csMinDate = DateTime.MinValue;
        TimeSpan tsEpoch = now - epoch;
        int passedSecods = (int)tsEpoch.TotalSeconds;
        byte[] copyBytes = BitConverter.GetBytes(passedSecods);
        Array.Copy(copyBytes, 0, b, 0, 4);
        DateTime tCompare = epoch.AddSeconds(BitConverter.ToInt32(b, 0));

将当前时间转换为 64 位 unix 时间,然后手动将 64 位时间转换为 32 位时间(准备好面对 2038 年的问题。)。

有关执行此操作的想法,请参见 SO 讨论:

其他参考资料:

尝试使用此代码:

byte[] b = new byte[] { 10, 12, 12, 12 };
DateTime t = DateTime.Now;
Array.Copy(BitConverter.GetBytes(t.Ticks), 0, b, 0, 4);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM