如何在C#中将字符串解析为日期时间格式

时间:2013-07-25 11:36:10

标签: c#

我有一个包含日期时间的字符串......

string S="08/18/2013 24:00:00"
DateTime DT = DateTime.ParseExact(S, "MM/dd/yyyy HH:mm:ss", null);

我想将其解析为日期时间,但显示了这样的异常。 日历System.Globalization.GregorianCalendar中不支持字符串表示的DateTime。

请告诉我这个问题的任何解决方案。

3 个答案:

答案 0 :(得分:10)

问题是小时是24小时。DateTime不支持这个,据我所知。

选项:

  • 使用我的Noda Time项目does support 24:00:00,但基本上通过添加一天来处理它(它不会保留它与“前一天结束”之间的差异)
  • 继续使用DateTime,手动将“24:00:00”替换为“00:00:00”,并记得在之后添加一天

如果您想保留实际上“当天结束”的信息,则需要单独执行此操作,并将信息与DateTime / LocalDateTime一起保留。

你应该 解析其他答案所建议的不变文化 - 你不是要解析一个特定于文化的字符串;你知道确切的分隔符等。

答案 1 :(得分:1)

string S="08/18/2013 00:00:00";  // here is the first problem occurred
DateTime DT = DateTime.ParseExact(S, "MM/dd/yyyy hh:mm:ss", System.Globalization.CultureInfo.InvariantCulture);

答案 2 :(得分:0)

来自The "HH" Custom Format Specifier

  

“HH”自定义格式说明符(加上任意数量的附加“H”)   说明符)将小时表示为从 00 23 的数字;那   是的,小时由一个基于零的24小时时钟表示   午夜时分。

因此,在这种情况下,使用24作为小时是无效的。

尝试使用hh格式与00代替;

string S = "08/18/2013 00:00:00";
DateTime DT = DateTime.ParseExact(S, "MM/dd/yyyy hh:mm:ss", CultureInfo.InvariantCulture);

这是DEMO

如果您真的想在24:00:00使用一小时,请查看由Noda Time开发的Jon