日期时间解析时出现错误

4

在我的C#程序中,我在下面的语句中收到以下错误信息:

dr["StartDate"] = Convert.ToDateTime(dr["business_dt"]).ToString("MM/dd/yyyy");

我在美国的电脑上没有遇到这个错误。但是在位于美国以外的用户机器上会出现错误。 从数据读取器返回的日期格式为:08/31/2010 12:00:00 AM。
系统.FormatException:字符串无法识别为有效的DateTime。 在System.DateTimeParse.Parse(String s,DateTimeFormatInfo dtfi, DateTimeStyles styles)中 在System.Convert.ToDateTime(String value, IFormatProvider provider)中 在System.String.System.IConvertible.ToDateTime(IFormatProvider provider)中 在System.Convert.ToDateTime(Object value)中
请给予建议。
谢谢。

2
你的DataRow为什么包含字符串,而不是DateTime值呢? - Jon Skeet
4个回答

4

编辑:

使用DateTime.ParseExact方法:

var dateString = dr["business_dt"].ToString();
var format = "MM/dd/yyyy hh:mm:ss tt";
var dateTime = DateTime.ParseExact(dateString, format, CultureInfo.InvariantCulture);
dr["StartDate"] = dateTime;

@Davide,@Marco,这对我没有用。仍然出现错误:“输入字符串格式不正确”。我也尝试了这个,但是它也会出现相同的错误:DateTime.ParseExact(DateTime.Now.ToString(), "MM/dd/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);谢谢。 - user74042
是的,请使用我回答中的示例,而不是上面评论中的代码,它们是不同的... - Davide Piras
不好意思,Davide,我觉得你编辑错了部分:应该这样写 var dateString = dr["business_dt"].ToString(); var format = "MM/dd/yyyy hh:mm:ss tt"; 然后再写下面的代码!! - Marco
你认为dr["business_dt"]是DateTime类型,但我认为它是字符串类型。 - PVitt
现在它看起来非常像我的答案。 ;) - PVitt
显示剩余2条评论

3
问题在于,在一些国家,日期中的月份和日期部分是颠倒的。例如,在美国,日期格式为"MM/dd/yyyy",而在德国为"dd/mm/yyyy"。
因此,您需要指定您的字符串使用的日期格式(在您的情况下,它看起来是美国格式,所以我选择了这种文化)。
DateTime date = Convert.ToDateTime(dr["business_dt"], new CultureInfo("en-US"));
dr["StartDate"] = date.ToString("MM/dd/yyyy");

2
在给出负评时,请发表评论。 - PVitt

0
这是因为机器的默认文化设置日期格式为“dd/MM/yyyy”,而在您的情况下,月份输入为“31”,这是不正确的,因此会引发错误。
请在解析日期时间之前设置文化。
在您的代码之前使用以下代码:
CultureInfo CultureInfo1 = (CultureInfo)CultureInfo.CurrentCulture.Clone();
CultureInfo1.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy";
Thread.CurrentThread.CurrentCulture = CultureInfo1;

请告诉我这是否有所帮助。


0
我刚在ASP.NET遇到了一个相关的问题。这个问题只出现在一个网站上,在一个运行两个(几乎相同)代码副本的Web服务器上。有一段时间让我很困惑,因为没有逻辑能够解释这些症状。最后发现是Web.Config的问题。故障的网站缺少了以下内容:
<globalization uiCulture="en" culture="en-AU" /> from the <system.web> section.

如果有帮助的话,我想提一下这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接