【问题标题】:Why is the C# parsed DateTime 7 hours ahead?为什么 C# 提前 7 小时解析 DateTime?
【发布时间】:2016-11-21 15:11:18
【问题描述】:

在尝试将本地时间从 Javascript 转换为 C# 时,我在 S/O 周围寻找了一些示例。虽然我找到了一些不同的方法来解决这个问题,但它们都将最后时间渲染为比我提前 7 小时,我不明白。

例如:

var t = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddMilliseconds(1468877118719).ToLocalTime();
Console.WriteLine(t)
7/18/2016 9:25:18 PM//<--output

var t = DateTime.Parse("2016-07-18T21:27:32.513Z");
Console.WriteLine(t);
7/18/2016 9:27:32 PM//output

而且,即使我只是尝试

var now = DateTime.Now;
Console.WriteLine(now);
7/18/2016 9:39:55 PM//the output is 7 hours ahead. 

谁能告诉我为什么会发生这种情况以及如何纠正它?

【问题讨论】:

  • 任何时候你得到一个意外的日期/时间差异,这是一些确切的小时数,它几乎总是一个时区问题。毫无疑问,您的计算机是 UTC+7 的时区
  • 您将本地时间视为 UTC 时间。不要这样做(或获取 UTC 时间,而不是本地时间,作为您的输入)。
  • DateTimeKind.Utc 是你的问题。获取当地时间。
  • @MarcB 你知道我是否可以简单地更改设置来纠正问题?
  • 如果最后一个关闭了 7 小时,您就有问题了。检查您的时区和区域设置。如果它在服务器上运行,请检查。我只是在本地运行了相同的代码并获得了正确的本地时间。

标签: javascript c# datetime iso gmt


【解决方案1】:

您运行它的机器将其本地时钟设置为与 UTC 匹配。

这在服务器和 *nix 工作站上很常见,包括 OS X。

【讨论】:

    【解决方案2】:

    您看到的是 UTC 值的输出。

    改变

    Console.WriteLine(t);
    

    Console.WriteLine(t.ToLocalTime());
    

    当然,这只会在第二种情况下有所不同。您已经在第一个实例中调用了ToLocalTime()

    【讨论】:

    • @spb: 那可能是因为代码上下文的当前时区 UTC 看这里:link
    猜你喜欢
    • 1970-01-01
    • 2012-11-25
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    • 2011-11-26
    • 1970-01-01
    相关资源
    最近更新 更多