2013-04-15 115 views
2

有人可以解釋爲什麼下面的代碼輸出「2013年4月14日8:00:00 PM」嗎?爲什麼c#DateTime.Parse似乎不正確地解釋字符串?

var dt = "2013-04-15+00:00"; 
var result = DateTime.Parse(dt); 
+1

可能是UTC字符串,並且您正在東部時區運行,當前時間比UTC UTC時間晚4個小時,並且Parse是本地的。檢查結果的UTC日期,看看它說什麼。 –

+0

@Anthony Pegram,你是對的。 – Samora

回答

1

格式化日期/時間在不同的地域,文化,環境等。當使用DateTime.Parse將盡最大努力猜測做什麼的許多方式,但它往往是不成功的情況下,在確定哪種日期時間格式合適時存在歧義。

您可以使用DateTime.ParseExact來指定字符串用於格式化日期的確切格式。

0

這是因爲它考慮到您的系統時區。然後它適當地調整指定的時間

1

有人猜測,我認爲安東尼佩克拉姆的評論是正確的。很可能它將字符串解釋爲日期,「2013-04-15」,時區爲格林威治標準時間的「+00:00」,並且沒有時間。默認時間是午夜,所以結果日期等於「2013-04-15午夜GMT」。然後轉換爲當地時區,比格林威治標準時間落後四個小時,並按照您所看到的輸出。

如果可以,您應該使用更精確的日期/時間格式,如ISO 8601,它看起來像「2013-04-15T00:00:00Z」或「2013-04-15T00:00:00 -04:00「

0

字符串的"+00:00"部分被解釋爲時區。這是格林威治東部0小時0分鐘的「地理」區域。

如果您打算在"+00:00"部分是一天的時間,而不是使用格式字符串,像這樣:

var dt = "2013-04-15+00:00"; 
var result = DateTime.ParseExact(dt, "yyyy-MM-dd+HH:mm", CultureInfo.InvariantCulture); 

"HH""mm"表示小時和一天中的(本地)時間分鐘。在相反的方向上,"yyyy-MM-ddzzz""+00:00"部分將意味着時區。

相關問題