c#如何将datetime转换为4字节的字节数组
我尝试将其转换为字节数组,但创建了最小为5的字节数组。 但在我的字节数组中,这个日期时间只有4个字节作为字节存储 代码如下:c#如何将datetime转换为4字节的字节数组,c#,C#,我尝试将其转换为字节数组,但创建了最小为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个字节。尝试使用以下代码: byte[] b = new byte[]
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个字节。尝试使用以下代码:
byte[] b = new byte[] { 10, 12, 12, 12 };
DateTime t = DateTime.Now;
Array.Copy(BitConverter.GetBytes(t.Ticks), 0, b, 0, 4);
将当前时间转换为64位unix时间,然后手动将64位时间转换为32位时间(准备好面对2038年的问题) 请参见SO讨论,了解如何做到这一点:
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));
您需要只存储日期还是整个日期+时间?4个字节根本不够。所以你要么牺牲射程要么牺牲精度<代码>日期时间支持以100ns的步长从第1年到9999年的日期。这需要8个字节…或者增加存储它的内容的大小。在4中完成datetimebytes@user3229083在不牺牲某些东西的情况下,无法将
DateTime
放入4个字节。它被设计成可以容纳8个字节,而不是4个字节。这是一个你无法回避的数学限制。这就像在一个位中尝试4个不同的值。例如,如果将精度降低到1秒,则得到的范围约为130年,这是unix时间戳选择的折衷。dat仅存储从GetByte(t.ticks)接收的8字节中的前4字节。。。其他4个字节丢失。如何将其反转回来?从4字节数组到DataTimes,如下所示(在解决方案中);DateTime tCompare=epoch.AddSeconds(位转换器.ToInt32(b,0));