2017-10-06 98 views
-1

當我試圖使用的TryParse方法來分析"2017-09-25T11:06:55+00:00"日期字符串,我得到下面的輸出:問題與日期時間解析

{9/25/2017 7:06:55 AM} 

因此,它看起來像11時許被越來越轉化爲上午7時不知道爲什麼這發生了什麼?是否因爲+00:00?? 我需要做什麼以便解析的日期時間輸出是相同的:即{9/25/2017 11:06:55 AM}

我嘗試使用當前區域/文化和日期時間樣式。假設本地但沒有運氣。 (注:我在東部時區)

謝謝。

+2

這是一個UTC時間戳,你得到的可能是您的本地時間。通常最好將代碼和數據庫中的所有日期保持爲UTC,並使用本地時間進行顯示。 – juharr

回答

0

您正在使用UTC時區(+00:00),但很明顯,您或您的PC位於-04:00時區。

0

如果你可以使用DateTimeOffset,那麼我傾向於選擇它。您可以保留時區信息,並且您可以訪問本對象和UTC對象的日期時間屬性。

 var dt = DateTimeOffset.Parse("2017-09-25T11:06:55+00:00"); 
     Console.WriteLine(dt.DateTime);   // 9-25 at 11:06 
     Console.WriteLine(dt.UtcDateTime);  // 9-25 at 11:06 
     Console.WriteLine(dt.LocalDateTime); // 9-25 at 07:06 

如果你知道你總是會被處理UTC,你可以通過調整萬能像這樣解析:

 var dt = DateTime.Parse("2017-09-25T11:06:55+00:00", CultureInfo.CurrentCulture, DateTimeStyles.AdjustToUniversal); 
     Console.WriteLine(dt); // 9-25 at 11:06 
+0

感謝Trio.No,它並不總是UTC。所以下面的代碼就可以了:DateTimeStyles styles = DateTimeStyles.AssumeLocal; const string utcIdenfitifier =「+00:00」; (date.Contains(utcIdenfitifier)) styles = DateTimeStyles.AdjustToUniversal; } 如果(DateTime.TryParse(日期,CultureInfo.CurrentCulture,樣式,出retVal的)) { 返回retVal的; } – Shirish

+0

同樣,你可以使用類似這樣的東西:var dto = DateTimeOffset.Parse(「2017-09-25T11:06:55 + 00:00」);返回dto.Offset == TimeSpan.Zero? dto.UtcDateTime:dto.LocalDateTime; – Trioj

0

當你分析它最初它是正確的值,它是剛剛調整到您的時區。你可以用ToUniversalTime迫使它:

DateTime.Parse("2017-09-25T11:06:55+00:00").ToUniversalTime().ToString("yyyy/MM/dd HH:mm:ss tt") 

輸出

"2017/09/25 11:06:55 AM" 
0

你要正確地分析UTC日期時間,並有2017年9月25日上午11時06分55秒,而不是2017年9月25日上午7:06:55。 +00:00是不正確的UTC格式,您需要將其更改爲「2017-09-25T11:06:55z」。

Here is working example