【问题标题】:How do I get javascript's Date.parse() in .Net?如何在 .Net 中获取 javascript 的 Date.parse()?
【发布时间】:2012-07-26 22:13:23
【问题描述】:

我正在使用 .NET 生成一个 JSON 文件,其中包含许多 Dates。

对于压缩,我想将它们存储为自 1970 年 1 月 1 日以来的毫秒数,而不是字符串,然后将它们转换为 Javascript 日期。但是.Net 自 1970-01-01 以来的毫秒概念与 Javascript 不匹配:

Javascript:

Date.parse("2012-05-15T13:57:57.0000000+00:00")
1337090277000

VB.Net:

Date.Parse("2012-05-15T13:57:57.0000000+00:00").Subtract(New Date(1970,1,1)).TotalMilliseconds
1337101077000.0

区别是10800 秒。 1970-01-01 的差异为 0,并随时间变化。

有没有办法从 .Net 中计算 Javascript 的毫秒自纪元概念?

【问题讨论】:

  • 正好相差 3 小时。也许原始时间来自不同的时区?

标签: javascript .net vb.net json datetime


【解决方案1】:

您正在将苹果与橙子进行比较。

这正是您在 UTC+3(以色列)中使用 javascript 时会得到的:

Date.parse("2012-05-15T13:57:57.0000000+00:00") - new Date(1970,1,1)
//1334419077000

这是因为当您在 javascript 中执行 new Date 时,这是根据机器的时区。看来vb.net也是一样的。


你会在 javascript 中得到正确的数字:

Date.parse("2012-05-15T13:57:57.0000000+00:00") - Date.UTC(1970,1,1)
//1334411877000

在 VB.net 中

    Dim a As Date
    a = Date.Parse("2012-05-15T13:57:57.0000000+00:00").ToUniversalTime()
    Dim b As Date
    b = New Date(1970, 2, 1, 0, 0, 0, DateTimeKind.Utc)
    a.Subtract(b).TotalMilliseconds
    '1334411877000 Same as javascript
    'Note that in javascript, month as 1 is same as 2 in VB.net because months start at 0 in javascript

【讨论】:

  • 喂,当然!用 DateTimeOffset 替换 Date 明确地解决了我的问题。我不喜欢给 Date 构造函数一个时区。
  • @Eyal 你为什么要这样做?这是不必要的运动部​​件。 UTC 始终相同。
  • 你最终答案的输出不是 1334411877000.0,而是 1337101077000。?Date.Parse("1970-01-01T00:00:00.0000000+00:00").Subtract(New Date(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc))。顺便说一下,TotalMilliseconds 是 72000000。VB.Net 的 Date.Parse() 忽略了时区。
  • @Eyal 你可以这样试试吗:DateTime.ParseExact( "2012-05-15T13:57:57.0000000+00:00", "yyyy-MM-ddTHH:mm:ss.fffffffZ",System.Globalization.DateTimeFormatInfo.InvariantCulture)
  • @Eyal 或Date.Parse("2012-05-15T13:57:57.0000000+00:00").TotalMilliSeconds - New Date(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).TotalMilliseconds
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-25
  • 1970-01-01
  • 1970-01-01
  • 2013-11-11
  • 2022-11-10
相关资源
最近更新 更多