【问题标题】:C# UTC time as MillisecondsC# UTC 时间为毫秒
【发布时间】:2018-06-05 13:13:45
【问题描述】:

在 C# 中,我想以毫秒为单位获取 UTC (+00:00) 时间。所以我可以在带有偏移量的 Javascript 中使用它(如下所示)。我已经尝试了几件事,但我没有做到这一点。

new Date(1528204115692 - (new Date().getTimezoneOffset() * 60000)).toString()

下面的代码根据我的时区给我毫秒。

((DateTimeOffset)DateTime.UtcNow).ToUnixTimeMilliseconds()

我想在数据库中保留 UTC 时间毫秒,以便根据用户浏览器区域显示日期时间。

例如:在 +03:00 区现在时间是 06.05.2018 16:12:20.568

我想以毫秒为单位保持 UTC 时区时间。 (纪元时间 00:00)

你能帮忙吗?

谢谢

【问题讨论】:

  • Javascript 使用从 1970/1/1 w3schools.com/jsref/jsref_gettime.asp 开始的毫秒数。它有点复杂。
  • 您在寻找 DateTime.UtcNow 吗?
  • @JeremyThompson 如果他写了一些比赛,这将是一个合理的问题。他是要四舍五入DateTime.UtcNow,还是要DateTime.UtcNow - new DateTime(1970, 1, 1)(他说的是Javascript),或者他想要???
  • 另外,他没有表现出任何实现这一目标的尝试
  • 你错了,是的。您不应该减去任何偏移量。您从 C# 获得的值采用 UTC 格式,而 JavaScript 中的 Date 构造函数采用 UTC 格式的值。 Unix 时间戳总是以 UTC 表示。

标签: javascript c# datetime


【解决方案1】:

您的 C# 代码是正确的。

来自mozilla

新日期(值);

价值

整数值,表示自 1970 年 1 月 1 日 00:00:00 UTC 以来的毫秒数,忽略闰秒(Unix Epoch;但请考虑大多数 Unix 时间戳函数以秒为单位)。

所以你只需要:

var date = new Date(1528204115692);

1528204115692 是您从 C# 代码中获得的值。

Javascript 日期在内部以毫秒为单位(它只是一个数字),“开始”于 1970 年 1 月 1 日 00.00(即“时间”0)。

所以:

public static readonly DateTime Date01Jan1970 = new DateTime(1970, 1, 1);

public static long MillisecondsFrom01Jan1970(DateTime dt)
{
    return (dt.Ticks - Date01Jan1970.Ticks) / TimeSpan.TicksPerMillisecond;
}

像这样使用它:

long ms = MillisecondsFrom01Jan1970(DateTime.UtcNow);

这将返回在 DateTime.UtcNow(UTC 时间中的“现在”)和 1970 年 1 月 1 日之间经过的毫秒数。

【讨论】:

  • 请问,您的 JS 代码在俄罗斯或英国给出相同的结果? var date = new Date(1528204115692); 这些C#代码也给出了相同的结果,是不是错了? ((DateTimeOffset)DateTime.Now).ToUnixTimeMilliseconds();((DateTimeOffset)DateTime.UtcNow).ToUnixTimeMilliseconds();
  • @barisusanmaz new Date(1528204115692).toString() 会根据当地时区打印不同的内容,但在内部它会是相同的。例如在意大利它打印:Tue Jun 05 2018 15:08:35 GMT+0200 (ora legale Europa occidentale)。并且可能该方法正在补偿DateTimeKind,例如DateTime.Now.Kind,保存DateTime的类型,如果是本地或UTC。
【解决方案2】:

以下代码在用户浏览器上的不同时区表现不同。

var date = new Date(1528204115692);

您可以通过更改计算机时区以相同的数字(毫秒)对其进行测试。此代码在更改时区时显示不同的日期时间。

【讨论】:

    猜你喜欢
    • 2017-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    • 2013-07-28
    相关资源
    最近更新 更多