DateTime.ParseExact赋予String未被识别为有效的DateTime。

时间:2012-08-01 19:18:26

标签: c# asp.net parsing datetime

我正在尝试将日期字符串解析为DateTime变量。我发现ParseExact是这样做的方法,但我试试这个我得到错误:

字符串未被识别为有效的DateTime。

string timeFormat = "dd-MM-yyyy hh:mm:ss";
DateTime startDate = DateTime.ParseExact(reader["startdate"].ToString(), timeFormat, CultureInfo.InvariantCulture);
DateTime nextDate = DateTime.ParseExact(reader["nextdate"].ToString(), timeFormat, null);

我已尝试使用null(恰好在另一页上工作)和CultureInfo.InvariantCulture

reader["startdate"].ToString()输出:01-08-2012 15:39:09

reader["nextdate"].ToString()输出:01-08-2012 15:39:09

我认为它应该有效,但事实并非如此。

有人知道出了什么问题? :)

4 个答案:

答案 0 :(得分:43)

您在格式字符串中使用hh。这是一天的12小时""领域。值15不在范围内......

您需要HH代替,这是24小时的说明符。

有关详细信息,请参阅MSDN custom date and time format strings documentation

答案 1 :(得分:1)

很可能是由于您的服务器区域设置和UI区域设置之间存在差异

一种更简单的方法是在web.config中指定全球化详细信息

<configuration>
   <system.web>
      <globalization culture="en-GB"/>
   </system.web>
</configuration>

或更详细的

<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="en-GB" uiCulture="en-GB" />

但请确保这不会与您的应用程序发生冲突

答案 2 :(得分:0)

尝试这样做有效

DateTime.ParseExact("01-08-2012 15:36:25", "dd-MM-yyyy HH:mm:ss", null);

答案 3 :(得分:0)

我不确定这是否有帮助,但我使用了本文中的确切代码并且它对我有用,因为DateTime.ParseExact(dat,“dd / MM / yyy HH:MM”,CultureInfo.InvariantCulture,System.Globalization .DateTimeStyles.None)不适合我。

阅读本文我刚刚在网上发布: http://rochcass.wordpress.com/2012/08/27/error-string-was-not-recognized-as-a-valid-datetime-solution/#more-350