我在這個日期有問題(從「Jira」REST API結果 - > Worklog-> Started字段),它返回不同的結果形式,我期望的。轉換成正確的日期時間
問題:
- 什麼樣/類型的日期格式是這樣嗎?
- 爲什麼返回不同的結果。 字符串日期:2017-06-20T22:09:00.000-0400 C#DateTime.Parse結果:{2017年6月21日上午10時09分00秒}
能否請您提供轉換的正確方法這到了正確的時間?
我在這個日期有問題(從「Jira」REST API結果 - > Worklog-> Started字段),它返回不同的結果形式,我期望的。轉換成正確的日期時間
問題:
能否請您提供轉換的正確方法這到了正確的時間?
它是一種ISO格式 - 最好的和不含歧義的日期格式,代表特定時區的時間。
2017-06-20T22:09:00.000-0400
代表2017年6月20日22:09 PM在時區GMT -4。
ISO格式被包括C#在內的大多數語言正確解析。
您在代碼中獲得另一個值的原因是因爲您位於GMT +8,當地時間是6月21日10:09 AM,當時是格林威治標準時間-6月20日22:09 PM。
這是絕對有效和預期的行爲。
時間和GMT偏移常常導致混淆。
首先,「這裏8:15」是什麼意思?格林威治標準時間?倫敦?別的地方?其次,「GMT + 2」是什麼意思?
在第一種情況下,誠實的答案是沒有辦法告訴沒有更多的上下文。在第二種情況下,更多的是人們誤解GMT抵消 - 很多人認爲「GMT ==倫敦」,所以「GMT + 2 ==倫敦+2」 - 當然這是不正確的,「GMT在倫敦冬季; BST (GMT + 1)==夏天的倫敦「。所以「GMT + 2」是「GMT + 2」,即夏季的柏林或冬季的尼科西亞。
由於這些原因,許多情況下,時間很重要,使用GMT或其他時區,但明確指出偏移量,例如, 「美國東部時間上午3:15」。
要回答你的問題,你有幾種選擇
像這樣的事情
DateTimeOffset date = new DateTimeOffset(2017, 6, 20, 22, 09, 0, 0, TimeSpan.FromHours(-4));
// 20 June 2017, 22:09, GMT-4
public static DateTimeOffset ParseIso8601(string iso8601String)
{
return DateTimeOffset.ParseExact(
iso8601String,
new string[] { "yyyy-MM-dd'T'HH:mm:ss.FFFK" },
CultureInfo.InvariantCulture,
DateTimeStyles.None);
}
我會寫定製的解析器,因爲格式不標準。 –
@MichałTurczyn它是一個ISO。如果ISO不是標準的,那麼沒有標準:) –