如何解析默認的git格式爲C#中的DateTime? 按照What is the format for --date parameter of git commit如何在C#中解析默認的git日期格式
從git的默認日期格式看起來像Mon Jul 3 17:18:43 2006 +0200
。
現在我無法控制輸出,這個字符串來自另一個打印日期的工具,我需要解析它。
如何解析默認的git格式爲C#中的DateTime? 按照What is the format for --date parameter of git commit如何在C#中解析默認的git日期格式
從git的默認日期格式看起來像Mon Jul 3 17:18:43 2006 +0200
。
現在我無法控制輸出,這個字符串來自另一個打印日期的工具,我需要解析它。
我不會解析這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);
}
現在,你有一個DateTimeOffset
爲07/03/2006 17:18:43 +02:00
。在這種情況下,您仍然可以獲得DateTime
部分及其.DateTime
property,但它的Kind
將爲Unspecified
。
但是,當然,我建議使用Noda Time來代替它,它可以解決大部分DateTime怪異問題。
到目前爲止,我發現的最佳格式字符串是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
);
謝謝,在我的情況下,我不需要在解析中非常精確,而且它適用於所有在同一時區工作的團隊中的工具。但是,下次我會記住這一點。 –