将文本转换为日期时间?

问题描述:

我想将文本转换为日期时间但出现错误。我的文本框值为格式dd/MM/yyyy 字符串未被识别为有效的DateTime。将文本转换为日期时间?

myFtMaster.GENTRTYDATEFROM =Convert.ToDateTime(txtTreatyPeriodfrom.Text.ToString()); 

我的业务对象'gentrtydatefrom'数据类型是DateTime。还有什么是最好的方法来避免这些类型的错误,而不使用Try catch块。

+0

请记住,将字符串转换为DateTime取决于格式和文化(例如,美国倾向于使用MM/DD/yyyy,但其他国家使用dd/MM/yyyy),所以通常最好是要求特定的格式,并使用TryParse来处理失败的分析。 – 2010-09-16 08:13:10

+0

谢谢哈科。我会牢记这一点。 – 2010-09-16 09:15:42

你要么指定使用特定格式的文化:

myFtMaster.GENTRTYDATEFROM = Convert.ToDateTime(
    txtTreatyPeriodfrom.Text, CultureInfo.GetCulture("en-GB") 
); 

或使用ParseExact方法:

myFtMaster.GENTRTYDATEFROM = DateTime.ParseExact(
    txtTreatyPeriodfrom.Text, "dd/MM/yyyy", CultureInfo.Invariant 
); 

ParseExact方法只接受特定的格式,而Convert.ToDateTime方法仍然允许格式上的一些变化,并且还接受一些其他日期格式。

为了赶上非法输入,你可以使用TryParseExact方法:

DateTime d; 
if (DateTime.TryParseExact(txtTreatyPeriodfrom.Text, "dd/MM/yyyy", CultureInfo.Invariant, DateTimeStyles.None, out d)) { 
    myFtMaster.GENTRTYDATEFROM = d; 
} else { 
    // communcate the failure to the user 
} 
+0

谢谢你Guffa。只是一个小问题,ParseExact&Parse有什么区别?另外为什么大多数研究人员倾向于使用ParseExact? – 2010-09-16 07:47:22

+0

尽管我指定格式如myFtMaster.GENTRTYDATEFROM = DateTime.ParseExact(txtTreatyPeriodfrom.Text.ToString(),“dd/MM/yyyy”,new System.Globalization.CultureInfo(“ en-CA“,true)); – 2010-09-16 07:56:21

+0

没问题,转换仍然取决于页面的文化设置。由于我没有设置为en-CA,因此转换可能无法正常工作。 – 2010-09-16 08:03:25

使用类似替代以下几点:

 DateTime date = DateTime.MinValue; 
     DateTime.TryParse(txtTreatyPeriodfrom.Text, out date); 

的TryParse类似于DateTime.Parse()但如果转换失败,则不抛出异常。

如果你想使用EN-CA特定文化使用以下命令:

DateTime.TryParse(txtTreatyPeriodfrom.Text, new CultureInfo("en-CA"), 
       DateTimeStyles.AllowWhiteSpaces, out date); 

那么显然对付那些无法解析日期。

确保用户在格式上提示将明显减少错误。

+0

'TryParse'方法返回解析是否成功。在调用之前将该变量设置为DateTime.MinValue是不必要的,因为无论解析是否成功,该值总是在方法中被替换。 – Guffa 2010-09-16 07:48:47

+0

如果解析失败,则说明日期等于DateTime.MinValue。设置它是不必要的,但我认为维护代码的人更容易阅读。尤其是当您添加处理日期处理的代码时。但无论如何,谢谢你补充说明。 – 2010-09-16 07:57:59

看一看

DateTime.TryParse(String value, out DateTime, [culture settings])