2015-11-13 37 views

回答

1

我不会解析这DateTime,因为它有它里面一个UTC offset值我将它解析到DateTimeOffset

为什么?因为如果你把它解析到DateTime,你会得到一个DateTime作为Local而且可能产生不同的机器不同的结果,因为他们可以时间时区偏移。

例如,我在Istanbul,我们使用的是使用UTC + 02:00的Eastern European Time。如果我用ParseExact方法运行代码的示例,我会将07/03/2006 18:18:43作为Local时间。

为什么?因为在2006年7月3日,my timezone was in a daylight saving time这是UTC + 03:00。这就是为什么它会生成1小时转发结果。当你解析到DateTime时,这部分会使它变得模糊不清。

string s = "Mon Jul 3 17:18:43 2006 +0200"; 
DateTimeOffset dto; 
if (DateTimeOffset.TryParseExact(s, "ddd MMM d HH:mm:ss yyyy K", 
           CultureInfo.InvariantCulture, 
           DateTimeStyles.None, out dto)) 
{ 
    Console.WriteLine(dto); 
} 

现在,你有一个DateTimeOffset07/03/2006 17:18:43 +02:00。在这种情况下,您仍然可以获得DateTime部分及其.DateTime property,但它的Kind将为Unspecified

但是,当然,我建议使用Noda Time来代替它,它可以解决大部分DateTime怪异问题。

+0

谢谢,在我的情况下,我不需要在解析中非常精确,而且它适用于所有在同一时区工作的团队中的工具。但是,下次我会记住这一点。 –

0

到目前为止,我发现的最佳格式字符串是ddd MMM d HH:mm:ss yyyy K

DateTime date; 
DateTime.TryParseExact(
    gitDateString, 
    "ddd MMM d HH:mm:ss yyyy K", 
    System.Globalization.CultureInfo.InvariantCulture, 
    System.Globalization.DateTimeStyles.None, 
    out date 
);