C#Javascript日期/时间不匹配

时间:2019-03-21 08:18:57

标签: javascript c#

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

2 个答案:

答案 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"