2013-07-25 121 views
2

我有一个包含日期时间这样的字符串...如何解析字符串为日期时间格式在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。

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

+1

只是想到没有时间24:00:00。不知道这是否是你的问题。 – ckv

+1

@ckv:有ISO-8601。这基本上是“一天结束”。 –

+0

@JonSkeet谢谢你这个有趣的事实。 – ckv

回答

10

的问题是用小时为24 DateTime不支持这一点,据我所知。

选项:

  • 用我Noda Time项目,does support 24:00:00,但基本上通过增加每天处理它(不保留这一点,“前一天的结束”之间的差异)
  • 继续使用DateTime,手动替换“24:00:00”和“00:00:00”,当它发生了,记得加了一天之后

如果你想保留的信息,它实际上是“结束这一天“你需要单独执行此操作,并将信息与DateTime/LocalDateTime一起保存。

你应该解析与不变的文化,因为其他答案已经建议 - 你不是试图解析文化特定的字符串;你知道确切的隔板等

+0

很好的捕获,我没有注意到24 :) –

+0

是的,它的工作.... – Deeapk

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); 
0

The "HH" Custom Format Specifier

的“HH”自定义格式说明符(加上任意数量的附加“H” 符)表示通过小时为一个数字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作为一个小时,看一下​​,它由Jon开发。

相关问题