You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:57:38