如何将Google Directory API返回的时间戳转为C# DateTime?
正确转换Google Directory API返回的ChromeOS设备自动更新到期时间戳(C#)
问题根源
Google Directory API返回的autoupdateexpiration字段是毫秒级Unix时间戳(以1970-01-01 00:00:00 UTC为起点的毫秒数),而C#中new DateTime(long)构造方法是将参数视为Ticks(1 Tick = 100纳秒),两者单位完全不同,直接转换会得到无效日期。
解决方案
以下是两种可靠的转换方式:
方式1:使用.NET Core 2.1+/NET 5+原生API
long autoUpdateExpiration = 1843455600000; // 从UTC基准时间添加毫秒数,按需转为本地时间 DateTime expirationDate = DateTime.UnixEpoch.AddMilliseconds(autoUpdateExpiration).ToLocalTime();
方式2:兼容.NET Framework的通用写法
long autoUpdateExpiration = 1843455600000; // 以1970-01-01 UTC为起点,添加对应毫秒数 DateTime expirationDate = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc) .AddMilliseconds(autoUpdateExpiration) .ToLocalTime(); // 若不需要本地时间,可移除ToLocalTime()
验证示例
输入时间戳1843455600000,转换后对应UTC时间为2028-06-01 03:00:00,转为本地时间会根据系统时区自动调整,与谷歌管理控制台显示的2028年6月到期时间一致。
注意事项
- 确保用
long类型接收时间戳,避免int类型溢出(API返回的是int64值) - 时区处理:若需与谷歌控制台显示时间完全匹配,需确认控制台使用的时区(通常为本地时区,因此转换时调用
ToLocalTime()即可)
内容的提问来源于stack exchange,提问作者user568551
相关产品推荐
相关产品推荐

