2010-10-07 172 views
0

這工作:轉換日期時間

testDateTime = DateTime.ParseExact("16/10/2010", "dd/MM/yyyy", null); 

這並不:

string somedate = "16/10/2010"; 
testDateTime = DateTime.ParseExact(somedate, "dd/MM/yyyy", null); 

爲什麼?

+1

兩者都適用於我 - 或者它至少是目前工作中的例子 - 所以會出現比問題中描述的更復雜的事情。 – Murph 2010-10-07 11:50:19

+1

您是否收到任何錯誤?如果是,那麼錯誤是什麼? – Shekhar 2010-10-07 11:51:40

+1

兩者都適合我。什麼是問題/錯誤? – CesarGon 2010-10-07 12:40:00

回答

0

出於某種原因,直到我說這個,也沒有爲我工作:CultureInfo.InvariantCulture

DateTime.ParseExact(S值, 「DD/MM/YYYY」,CultureInfo.InvariantCulture);

2

這兩個代碼片段是絕對等效的,應該工作/不工作相同。我懷疑somedate變量的值不是你認爲它在你的應用程序中。嘗試調試。

0

當我嘗試它時它工作正常......只是複製並粘貼它。

插入一個斷點,將指針放在變量上並檢查月,日和年的成員。如果他們不是權利,請告訴我們你看到了什麼。

如果您正在使用打印或msgbox顯示變量的值,也許您不會輸出掩碼/格式。

+0

但dateTime格式是一樣的嗎?對我來說,日期和月份切換:「16/10/2010」變成「10/16/2010」... – 2010-10-07 11:53:09

+0

您的意思是說您有16個月沒有得到例外嗎? – Jonathan 2010-10-07 12:02:54

+0

號碼「dd/MM/yyyy」變成「MM/dd/yyyy」。 – 2010-10-07 12:04:59

0

當我嘗試時,這兩件事都適合我。你得到的錯誤是什麼?

ParseExact()使用第二個參數來解析您的輸入字符串,而不是以該格式返回值。

編輯:從下面喬的評論 - 你得到的將是在「MM/DD/YYYY」格式」輸出 - 輸出將不具有任何內在格式的DateTime類型

+1

「你得到的輸出將是」MM/dd/yyyy「格式」 - 輸出將是沒有任何固有格式的DateTime類型。 – Joe 2010-10-07 17:09:13

0

是你。試圖改變日期時間格式嗎?你不能用DateTime對象來做到這一點,只有當你使用String.Format顯示DateTime對象時才能改變格式:String.Format(「{0:d/M/yyyy HH: MM:SS}」,DT)(例如或其他方法)

1

您的兩個例子是等效的,如果你的當前區域性爲en-US應該工作,但不一定在所有其他文化

例如,下面就因爲去DE培養使用期限作爲分隔符(二○一○年十月十六日)拋出出現FormatException:

System.Threading.Thread.CurrentThread.CurrentCulture = 
      CultureInfo.CreateSpecificCulture("de-DE"); 
DateTime testDateTime = DateTime.ParseExact("16/10/2010", "dd/MM/yyyy", null); 

一般來說這是很好的做法(的FxCop會警告一下吧)始終指定IFormatProvider參數可用時:如果您正在解析來自當前用戶的輸入,則通常爲CultureInfo.CurrentCulture;或者CultureInfo.InvariantCulture(如果您正在解析來自外部源的輸入)。

// For input from the current user (16.10.2010 in Germany) 
testDateTime = DateTime.ParseExact("16/10/2010", "dd/MM/yyyy", CultureInfo.CurrentCulture); 

// For input from an external source in a defined culture-invariant format 
testDateTime = DateTime.ParseExact("16/10/2010", "dd/MM/yyyy", CultureInfo.InvariantCulture);