将文本转换为日期时间?
我想将文本转换为日期时间但出现错误。我的文本框值为格式dd/MM/yyyy 字符串未被识别为有效的DateTime。将文本转换为日期时间?
myFtMaster.GENTRTYDATEFROM =Convert.ToDateTime(txtTreatyPeriodfrom.Text.ToString());
我的业务对象'gentrtydatefrom'数据类型是DateTime。还有什么是最好的方法来避免这些类型的错误,而不使用Try catch块。
你要么指定使用特定格式的文化:
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
}
谢谢你Guffa。只是一个小问题,ParseExact&Parse有什么区别?另外为什么大多数研究人员倾向于使用ParseExact? – 2010-09-16 07:47:22
尽管我指定格式如myFtMaster.GENTRTYDATEFROM = DateTime.ParseExact(txtTreatyPeriodfrom.Text.ToString(),“dd/MM/yyyy”,new System.Globalization.CultureInfo(“ en-CA“,true)); – 2010-09-16 07:56:21
没问题,转换仍然取决于页面的文化设置。由于我没有设置为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);
那么显然对付那些无法解析日期。
确保用户在格式上提示将明显减少错误。
'TryParse'方法返回解析是否成功。在调用之前将该变量设置为DateTime.MinValue是不必要的,因为无论解析是否成功,该值总是在方法中被替换。 – Guffa 2010-09-16 07:48:47
如果解析失败,则说明日期等于DateTime.MinValue。设置它是不必要的,但我认为维护代码的人更容易阅读。尤其是当您添加处理日期处理的代码时。但无论如何,谢谢你补充说明。 – 2010-09-16 07:57:59
看一看
DateTime.TryParse(String value, out DateTime, [culture settings])
请记住,将字符串转换为DateTime取决于格式和文化(例如,美国倾向于使用MM/DD/yyyy,但其他国家使用dd/MM/yyyy),所以通常最好是要求特定的格式,并使用TryParse来处理失败的分析。 – 2010-09-16 08:13:10
谢谢哈科。我会牢记这一点。 – 2010-09-16 09:15:42