2017-06-13 53 views
1

我很努力的時間解析。我的輸入是以「Z」結尾的時間字符串。我希望那是UTC。當我解析該字符串兩個小時被添加到結果。我不知道爲什麼。使用特定的文化並沒有什麼區別。爲什麼兩個小時加入我的時間

System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("en-US"); 
string inTime = "2015-04-25T23:39:15Z"; 
DateTime outTime = DateTime.Parse(inTime, ci); 
string outTime_string = outTime.ToString("yyyy-MM-ddTHH:mm:ssZ", ci); 
// outTme and outTime_string are both 2015-04-26T01:39:15Z 

回答

7

默認情況下,DateTime.Parse轉換爲「kind」Local。 (打印出outTime.Kind來驗證。)所以它理解源是通用的 - 但它將其調整到系統本地時間。請注意,文化與時區唯一的格式和日曆系統無關。

您可以防止通過指定DateTimeStyles值:

DateTime outTime = DateTime.Parse(inTime, ci, DateTimeStyles.AdjustToUniversal); 

在這一點上,outTime.KindUtc,和值將是23:39 PM預期。

快插:整個DateTime.Kind位有點亂。有一種代表三種不同價值的類型是可怕的。您可能需要查看我的Noda Time項目,以獲取.NET中日期/時間處理的替代方法。

相關問題