这个问题在这里已有答案:
Chrome开发者控制台中的以下js代码。
new Date(1560780000000)
产量
2018年2月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更改方法的签名,有人可以帮忙吗?
X
这给了我相同的结果:
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假设进行所有计算,并且仅转换为本地时间以进行检查。
问题是你已经增加了毫秒,这使得它在夏天时DST会产生影响(我认为)。
更多细节here。
要在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"