Chrome开发者控制台中的以下js代码。
new Date(1560780000000)
收益
2019年6月18日星期二00:00:00 GMT + 1000(澳大利亚东部标准时间)
但是在同一台计算机上的c#中,这会产生
new DateTime(1970, 1, 1).AddMilliseconds(1560780000000);
17/06/2019 14:00:00
使用
new DateTime(1970, 1, 1).ToLocalTime().AddMilliseconds(1560780000000);
收益
18/06/2019 01:00:00
日期仍然是一个小时。我正在尝试将JS日期准确地转换为C#DateTime。我无法从DateTime更改方法的签名,有人可以帮忙吗?
KH
答案 0 :(得分:2)
这给了我相同的结果:
new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddMilliseconds(1560780000000)
或这个
new DateTime(1970, 1, 1).AddMilliseconds(1560780000000).ToLocalTime()
它们不是100%等价的,但是第二个将创建类型为Unspecified
的日期,当您调用ToLocalTime()
时该日期假定为UTC。
在ToLocalTime()
之前或之后调用AddMilliseconds()
的区别在于夏令时。根据日期,相同的本地时间将被不同地解释。因此,您应该始终使用我假设的UTC进行所有计算,并且只能转换为本地时间以进行最后检查。
问题是您添加了毫秒数,使夏令时成为夏令时的关键(我认为)。
更多详细信息here。
答案 1 :(得分:0)
要获取JavaScript中的UTC时间戳:
new Date(1560780000000).toJSON(); // "2019-06-17T14:00:00.000Z"
C#:
DateTimeOffset.FromUnixTimeMilliseconds(1560780000000).ToString("o"); // "2019-06-17T14:00:00.0000000+00:00"
new DateTime(1970, 1, 1).AddMilliseconds(1560780000000).ToString("o"); // "2019-06-17T14:00:00.0000000"