2013-07-25 127 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開發。

相關問題