2011-05-11 62 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()将使您能够控制转换。