【问题标题】:The DateTime.Parse is off by one hour. Why?DateTime.Parse 关闭一小时。为什么?
【发布时间】:2011-01-13 16:11:49
【问题描述】:

我一直无法理解为什么恢复的日期时间字符串的值与其原始值不同。我正在将字符串写入通用日期时间(格式为“u”,因此末尾有一个“z”),但是当它恢复时,它相差一小时。我正在使用“u”来防止这种事情发生。谁能告诉我为什么不一样?

我需要一个好的字符串表示,因为我将在 5 个不同的时区使用代码。

程序:

using System;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            //Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.GetCultureInfoByIetfLanguageTag("es-CR");

            DateTime min = DateTime.MinValue;

            Console.Write("Min value date: ");
            Console.WriteLine(min);

            Console.Write("String:         ");
            string str = min.ToString("u");
            Console.WriteLine(str);

            DateTime dt = DateTime.Parse(str);

            Console.Write("Restored Date:  ");
            Console.WriteLine(dt);

            Console.ReadLine();

        }
    }
}

输出是:

最小值日期:01/01/0001 12:00:00 a.m.

字符串:0001-01-01 00:00:00Z

恢复日期:01/01/0001 01:00:00 a.m.

编辑:尝试哥斯达黎加文化的选项。

【问题讨论】:

  • 当您将字符串解析回日期时间时,您在哪个时区?

标签: c# .net parsing datetime tostring


【解决方案1】:

当您解析通用 DateTime 字符串时,它使用的是您的本地时区吗?您可以使用 ToUniversalTime() 和 ToLocalTime() 方法来回转换。此外,如果您将时区偏移量放在“Z”之后,这将有助于您转换到正确的时区。

布赖恩

【讨论】:

  • 代码字符串 str = min.ToUniversalTime().ToString("u", System.Globalization.CultureInfo.InvariantCulture);似乎按预期执行。仍在研究其他文化以测试这是否是解决方法。
  • UTC时间应该有一个时区吗?
  • @Kees UTC 时间会有一个特定的DateTimeKind.Utc
【解决方案2】:

有一个很interesting thread about this on bytes.com

看起来你约会结束时的“Z”在 UTC 和 CET 之间搞混了。

现在在 CET 非常分散的区域 (不是夏令时)正是我们的一个 稍后在 UTC/GMT/ZULU/Military。

我对这个主题不是很自信,所以我让你看这个帖子。

【讨论】:

    猜你喜欢
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 2016-07-03
    • 1970-01-01
    • 2010-10-18
    相关资源
    最近更新 更多