c# - C# 与 Unix 时间之间的转换 - 丢失 1 天
问题描述
这是代码:
var date = DateTime.Now.Date;
var ms = (long)(date - DateTimeOffset.UnixEpoch).TotalMilliseconds;
var date1 = DateTimeOffset.FromUnixTimeMilliseconds(ms).DateTime.Date;
日期是 24 日,日期 1 是 23 日
为什么他们不匹配?
解决方案
使用DateTimeOffset.FromUnixTimeMilliseconds(ms).LocalDateTime
.
DateTime.Now
有Kind = Local
所以它会扭曲你的 UTC 偏移量。
你可以看到它:
var kind = DateTime.Now.Date.Kind;
然后你可以用“kind”做一个小测试:
var date = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Local);
var ms = (long)(date - DateTimeOffset.UnixEpoch).TotalMilliseconds;
多少钱ms
?根据冬季/夏季时间和您所在的位置,它可能不是 0。
所以你ms
包括你的UTC偏移量。现在你必须:
var date1 = DateTimeOffset.FromUnixTimeMilliseconds(ms).LocalDateTime;
并且希望您仍然处于“原始” UTC 偏移量(因此在计算date
和计算之间没有足够的天数date1
让您在冬季/夏季时间之间切换)
(如果你做的一切都正确,你真的不需要.Date
after .LocalDateTime
,因为日期应该已经是00:00:00
)
推荐阅读
- python-3.x - 无法使用美汤从网页中提取 div 标签?
- javascript - 测试 Redux 连接的 Typescript 文件
- c# - 在 Collections 和 Regex.Match 方法之间传递数据
- android - ViewPager 有两个包含一组卡片的片段
- c# - 方法应该等到另一个方法启动的另一个方法完成
- php - Jquery获取请求不显示数据
- javascript - Web组件稳定状态后如何添加样式?
- java - 将十六进制值附加到字符串
- spring-boot - Spring Boot JPA 关联与普通 SQL 连接
- erlang - 我的 gen_statem fsm 实现有什么问题?