首页 文章

当字符串格式与系统日期时间格式不同时,字符串未被识别为有效的DateTime

提问于
浏览
1

我的系统短日期时间格式为d / M / yyyy . 我正在通过“03/29/2011 02:38:18 PM”,所以它给出错误“字符串未被识别为有效的DateTime”

DateTime.Parse("03/29/2011 02:38:18 PM")

如果机器的日期时间格式设置为m / d / yyyy,则可以正常工作 .

Edit: 我的应用程序是一个winform应用程序,它包含一个数据gridview,这个网格视图包含一个自定义DateTime控件(列),由其他开发人员创建 . 当我尝试更改网格中此datetime列的值时,会发生此错误 . VS调试器没有捕获异常,所以我无法找到我应该尝试修复它的位置 .

谢谢

8 回答

  • 1

    使用 DateTime.ParseExact 从字符串解析日期时间

    例:

    DateTime.ParseExact("2001-01-01", "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture);
    
  • 0

    您可以尝试更改文化信息,以使您的输入与系统的格式相匹配 .

    所以尝试在web.config中添加它:

    <globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="en-US" />
    
  • 1

    请改用DateTime.ParseExact() . 如果通过传入正确的FormatString知道字符串看起来像进入函数,您可以准确指定如何解析日期 . 如果标准的DateTime格式字符串不起作用,则可以使用custom DateTime Format String .

  • 0

    根据 d/M/yyyy 格式, 03/29/2011 将相当于29号月份显然不存在 .

    另一种格式有日期和月份切换,然后字符串代表29. March,这是一个完全有效的日期 .

  • 0

    来自MSDN

    重要因为Parse(String)方法尝试使用当前区域性的格式设置规则来解析日期和时间的字符串表示形式,尝试解析跨不同文化的特定字符串可能会失败或返回不同的结果 . 如果将跨不同的语言环境解析特定的日期和时间格式,请使用DateTime.Parse(String,IFormatProvider)方法或ParseExact方法的重载之一,并提供格式说明符 .

  • 0

    是的,除非您提供FormatProvider,否则DateTime.Parse函数使用系统格式来解析日期 . 显然,在d / m / yyyy的情况下,没有第29个月,因此解析失败

  • 0

    你可以在这里找到答案:String was not recognized as a valid DateTime " format dd/MM/yyyy"

    您可以使用相应的CultureInfo解析日期,CultureInfo定义日期格式和日期部分(月,日,年)或(日,月,年)的顺序 .

    或者你可以使用ParseExact并给它一个格式字符串,如上面的答案所述 .

  • 0

    见“convert Different formate of DateTime to specific String format in c#

    private DateTime ConvertToDateTime(string strDateTime)
    {
    DateTime dtFinaldate; string sDateTime;
    try { dtFinaldate = Convert.ToDateTime(strDateTime); }
    catch (Exception e)
    {
    string[] sDate = strDateTime.Split('/');
    sDateTime = sDate[1] + '/' + sDate[0] + '/' + sDate[2];
    dtFinaldate = Convert.ToDateTime(sDateTime);
    }
    return dtFinaldate;
    }
    

相关问题