如何实现32位DateTime与字节数组的相互读写?
32位DateTime与字节数组的读写实现方案
嘿,我来给你分享个简便的32位DateTime和字节数组互转方案!你已经搞定64位的实现了,32位因为没有像ToBinary()/FromBinary()那样的直接内置方法,咱们可以用32位Unix时间戳来实现,这也是业界常用的32位时间表示方式,实用性很强。
先给你划个重点:32位Unix时间戳的范围是从1970-01-01 00:00:00 UTC到2038-01-19 03:14:07 UTC,这个区间覆盖了绝大多数日常业务场景,如果你需要的时间范围在这个区间内,这个方案就完美适配。
从DateTime生成32位字节数组
// 确保使用UTC时间,避免时区问题 DateTime utcNow = DateTime.UtcNow; // 计算从Unix纪元到当前时间的总秒数,转成32位无符号整数 uint unixTimestamp = (uint)(utcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds; // 转换为4字节的数组(32位对应4字节) byte[] utcNowBytes = BitConverter.GetBytes(unixTimestamp);
从32位字节数组转回DateTime
// 从字节数组读取32位无符号整数 uint unixTimestampBack = BitConverter.ToUInt32(utcNowBytes, 0); // 基于Unix纪元时间,加上对应的秒数转回DateTime DateTime utcNowBack = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(unixTimestampBack);
如果你非要用DateTime.Ticks来做32位转换的话,得注意:Ticks是以100纳秒为单位的64位值,截断成32位后只能表示约7分钟的时间范围,几乎没什么实用价值,所以还是优先推荐上面的Unix时间戳方案。
内容的提问来源于stack exchange,提问作者Christopher Vickers
相关产品推荐
相关产品推荐

