【问题标题】:Why does DateTime.TryParseExact() return different time zone for these input strings?为什么 DateTime.TryParseExact() 为这些输入字符串返回不同的时区?
【发布时间】:2015-11-13 17:17:21
【问题描述】:

我有将字符串解析为 DateTime 的最简单方法但返回类型是 DateTimeOffset?

我希望输出是

2011-01-11 00:00:00 +01:00
2011-10-11 00:00:00 +01:00

其实是

2011-01-11 00:00:00 +01:00
2011-10-11 00:00:00 +02:00

为什么会出现这种行为?我的测试程序如下。

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(Parse("20110111").ToString());
        Console.WriteLine(Parse("20111011").ToString());
        Console.ReadLine();
    }

    public static DateTimeOffset? Parse(string date)
    {
        DateTime parsedDate;
        if (DateTime.TryParseExact(date, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out parsedDate))
        {
            return parsedDate;
        }

        return null;
    }
}

【问题讨论】:

    标签: c# datetime datetimeoffset


    【解决方案1】:

    它正在为当前机器返回TimeZone,并且一小时的差异是由于夏令时。这在 10 月无效,但在 1 月有效。

    【讨论】:

    • 只是为了扩展这一点 - 在 parsedDate 变量从 DateTime 隐式转换为 DateTimeOffset? 时应用本地计算机的时区,因为这就是声明的内容作为方法的返回类型。
    猜你喜欢
    • 1970-01-01
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-13
    • 2021-05-12
    • 2016-01-18
    相关资源
    最近更新 更多