有人可以解釋爲什麼下面的代碼輸出「2013年4月14日8:00:00 PM」嗎?爲什麼c#DateTime.Parse似乎不正確地解釋字符串?
var dt = "2013-04-15+00:00";
var result = DateTime.Parse(dt);
有人可以解釋爲什麼下面的代碼輸出「2013年4月14日8:00:00 PM」嗎?爲什麼c#DateTime.Parse似乎不正確地解釋字符串?
var dt = "2013-04-15+00:00";
var result = DateTime.Parse(dt);
MSDN文檔對此進行了深入描述。
http://msdn.microsoft.com/en-us/library/1k1skd40(v=vs.90).aspx
它在UTC字符串中讀becasue的+00的:00。它在當地時間打印出來。
有格式化日期/時間在不同的地域,文化,環境等。當使用DateTime.Parse
將盡最大努力猜測做什麼的許多方式,但它往往是不成功的情況下,在確定哪種日期時間格式合適時存在歧義。
您可以使用DateTime.ParseExact
來指定字符串用於格式化日期的確切格式。
這是因爲它考慮到您的系統時區。然後它適當地調整指定的時間
有人猜測,我認爲安東尼佩克拉姆的評論是正確的。很可能它將字符串解釋爲日期,「2013-04-15」,時區爲格林威治標準時間的「+00:00」,並且沒有時間。默認時間是午夜,所以結果日期等於「2013-04-15午夜GMT」。然後轉換爲當地時區,比格林威治標準時間落後四個小時,並按照您所看到的輸出。
如果可以,您應該使用更精確的日期/時間格式,如ISO 8601,它看起來像「2013-04-15T00:00:00Z」或「2013-04-15T00:00:00 -04:00「
字符串的"+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"
部分將意味着時區。
可能是UTC字符串,並且您正在東部時區運行,當前時間比UTC UTC時間晚4個小時,並且Parse是本地的。檢查結果的UTC日期,看看它說什麼。 –
@Anthony Pegram,你是對的。 – Samora