【问题标题】:Error when parsing datetime解析日期时间时出错
【发布时间】:2011-10-14 10:14:18
【问题描述】:

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

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

我在我的美国机器上没有收到此错误。但它在位于美国以外的用户机器上引发了错误。 从 datareader 返回的日期格式是:08/31/2010 12:00:00 AM

System.FormatException:字符串未被识别为有效的 DateTime。 在 System.DateTimeParse.Parse(字符串 s,DateTimeFormatInfo dtfi, DateTimeStyles 样式)在 System.Convert.ToDateTime(字符串值, IFormatProvider 提供程序)在 System.String.System.IConvertible.ToDateTime(IFormatProvider 提供程序) 在 System.Convert.ToDateTime(对象值)

请指教。

谢谢。

【问题讨论】:

  • 为什么你的 DataRow 仍然包含 字符串,而不是 DateTime 值?

标签: c# datetime


【解决方案1】:

编辑:

使用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;

【讨论】:

  • 我试过了,它不起作用:恕我直言,你应该使用var format = "MM/dd/yyyy hh:mm:ss tt"
  • @Davide,@Marco,这对我不起作用。仍然得到错误:“输入字符串格式不正确”。我也试过这个,它给出了同样的错误:DateTime。 ParseExact(DateTime.Now.ToString(), "MM/dd/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);谢谢。
  • 是的,在我的回答中使用示例,而不是上面评论中的代码,它是不同的......
  • 不,Davide,我认为您编辑了错误的部分:您应该先做var dateString = dr["business_dt"].ToString(); var format = "MM/dd/yyyy hh:mm:ss tt";,然后再做剩下的部分代码!!
  • 您假设 dr["business_dt"] 是 DateTime 类型。我认为它是字符串类型。
【解决方案2】:

问题在于,在一些国家/地区,日期的月份和日期部分被颠倒了。在美国,它是“MM/dd/yyyy”,例如德国是“dd/mm/yyyy”。

所以你必须指定你的字符串是什么格式(在你的情况下它看起来像美国格式,所以我选择了这种文化):

DateTime date = Convert.ToDateTime(dr["business_dt"], new CultureInfo("en-US"));
dr["StartDate"] = date.ToString("MM/dd/yyyy");

【讨论】:

  • 投反对票时请发表评论。
【解决方案3】:

发生这种情况是因为机器的默认文化表明日期格式为“dd/MM/yyyy”,而在您的情况下,月份输入为“31”,这是不正确的,这就是它引发错误的原因。

请在解析日期时间之前设置文化。

在您的代码之前使用此代码:

CultureInfo CultureInfo1 = (CultureInfo)CultureInfo.CurrentCulture.Clone();
CultureInfo1.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy";
Thread.CurrentThread.CurrentCulture = CultureInfo1;

如果这有帮助,请告诉我。

【讨论】:

    【解决方案4】:

    我刚刚在 ASP.NET 中遇到了一个相关问题。问题发生在运行两个(几乎相同)代码副本的 Web 服务器上的一个网站上。让我走了一段时间,因为似乎没有符合症状的逻辑。原来是 Web.Config 的问题。失败的站点丢失:

    <globalization uiCulture="en" culture="en-AU" /> from the <system.web> section.
    

    我想我只是提一下,以防它对任何人有帮助。

    【讨论】:

      猜你喜欢
      • 2018-05-27
      • 2014-01-29
      • 1970-01-01
      • 1970-01-01
      • 2021-06-29
      • 1970-01-01
      • 1970-01-01
      • 2017-09-26
      • 1970-01-01
      相关资源
      最近更新 更多