2015-11-13 62 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 
);