DateTime.ParseExact会提示“字符串无法被识别为有效的日期时间”。

24

我正在尝试将一个日期字符串解析为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个回答

63

当然。所以当我说它在另一个页面上工作时,我只是幸运的是上次测试之前是12点之前。但这个可以工作。非常感谢! :) - m0rfarpeter
顺便说一下,回答得相当快。我甚至还不能接受这个答案 :) - m0rfarpeter
哦,我的天啊,谢谢这个……我花了半天时间才弄明白。 - Christian
我的建议是,在 API 文档示例负载中的日期时间字符串中,确保小时和日期都大于 12。我宁愿花费额外的时间来找到正确的格式字符串,也不愿意在运行时出现错误。 - undefined

2
很可能是由于您的服务器语言环境与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" />

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


这解决了我的问题,即使我指定了区域 DateTime.ParseExact(stringToConvert, format, new CultureInfo("en-NZ")); 我确保开发机器和生产服务器的区域设置相同 - 它在本地工作但在生产环境中不起作用。 - Matt Kemp

0

试试这个,它有效。

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

是的..只需要把hh改成HH即可 :) - m0rfarpeter

0

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