2011-05-11 69 views
2

我在提交按鈕的文本框上使用Ajax控件工具包日曆擴展器。簡單。幫助將字符串日期轉換爲DateTime

調試程序顯示文本已正確傳輸到調用方法,但此行轉換代碼將文本框文本轉換爲1/1/0001 12:00:00 AM。文本框的日期是這樣的:4/15/2011

DateTime txtMyDate = Convert.ToDateTime(txtDate.Text); 

我在做什麼錯?

+0

那麼,你想要的只是一個日期時間值,只有一個日期?! – 2011-05-11 21:19:39

回答

12

您應該使用DateTime.Parse()方法:

DateTime txtMyDate = DateTime.Parse(txtDate.Text); 

如前所述,你也可以用類似的語法使用DateTime.ParseExact()如圖所示:

DateTime txtMyDate = DateTime.ParseExact(txtDate.Text, 
             [string format], 
             [IFormatProvider provider]); 

解析VS ParseExact:

解析() - 假定數據有效並盡最大努力將其納入該類型中,當開發人員有機會引用常識時,這些東西顯得模糊不清。

ParseExact() - 只允許指定的確切格式,並會拋出任何變化。

Source on Parse vs ParseExact

+0

奇怪的是,[MSDN](http://msdn.microsoft.com/en-us/library/xhz1w05e.aspx)說'Convert.ToDateTime(string)'實際上調用DateTime.Parse()',所以我'如果'Convert.ToDateTime()'沒有,直接調用'DateTime.Parse()'會有點好奇。 – dandan78 2011-05-11 21:08:46

+0

我已經嘗試了兩個,我仍然得到相同的結果。 – 2011-05-11 21:12:13

+0

您仍然收到1/1/0001 12:00:00 AM作爲您的DateTime?如果發生這種情況,則可能是數據未正確傳入或未設置值的問題。 – 2011-05-11 21:13:55

6

有許多方法將文本轉換爲DateTime,試試這個:

DateTime txtMyDate = 
    DateTime.ParseExact(txtDate.Text, "M/d/yyyy", CultureInfo.InvariantCulture); 

編輯:忘了文化信息的說法

+0

這需要IFormatProvider的第三個參數。 – 2011-05-11 21:07:29

+0

@尼克 - 是的,我意識到我錯過了它,編輯它。謝謝。 – 2011-05-11 21:08:13

1

使用DateTime.ParseExact從提取您的日期值一個格式的日期字符串:

DateTime dateValue = 
    DateTime.ParseExact(stringDateValue, "M/d/yyyy", 
     CultureInfo.InvariantCulture); 
0

試試

DateTime instance = DateTime.Parse(txtDate.Text) ; 

這是[有點]靈活的,它會接受什麼。或者,DateTime.ParseExact()將使您能夠控制轉換。