不匹配C#Javascript日期/时间[重复]

问题描述 投票:0回答:2

这个问题在这里已有答案:

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

javascript c#
2个回答
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假设进行所有计算,并且仅转换为本地时间以进行检查。

问题是你已经增加了毫秒,这使得它在夏天时DST会产生影响(我认为)。

更多细节here


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"
© www.soinside.com 2019 - 2024. All rights reserved.