2015-11-13 65 views
2

我有最简单的方法解析一个字符串到DateTime 但返回类型是DateTimeOffset?为什么DateTime.TryParseExact()为这些输入字符串返回不同的时区?

我预计输出为

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; 
    } 
} 

回答

9

它针对当前机器返回TimeZone一小时的差异是由于节约一天光。哪些在十月份不生效,但是在一月份。

+0

@JoelCoehoorn,谢谢你的编辑:) – Habib

+0

为了扩大这一点 - 本地计算机的时区正在被应用,当'parsedDate'变量被隐式地从DateTime转换为DateTimeOffset? ,因为这就是声明为方法的返回类型。 –

相关问题