2013-04-05 46 views
14

this問題的擴展,我從數據庫中提取一個日期並在網格中顯示它。DateTime.Value.ToString(format)給我12小時制

我有以下代碼:

string date = ""; 
DateTime? dateSent;  

if (row["DateSent"] != DBNull.Value) 
        dateSent = (DateTime)row["DateSent"]; 
       else dateSent = null; 

date = (dateSent.HasValue ? dateSent.Value.ToString("dd/MM/yyyy hh:mm:ss") : null); 

當我在這個代碼塊的末尾添加一個斷點,我可以看到DateTime?變量「dateSent」具有一個24小時時鐘時間戳例如14 :50:34。但是,當我檢查string變量「date」的值時 - 它具有12小時時鐘格式,例如02:50:34。

這不是我的意圖轉換爲12小時的時鐘格式。我有兩個問題:

  1. 爲什麼dateSent.Value.ToString(「dd/MM/yyyy hh:mm:ss」)返回12小時時間戳?
  2. 我該如何避免這種情況並使用24小時製版本?
+0

看看[自定義日期和時間格式字符串](http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx) – Zbigniew 2013-04-05 15:23:02

回答

32

Why is dateSent.Value.ToString("dd/MM/yyyy hh:mm:ss") returning a 12 hour clock timestamp?

因爲你要求它。這就是hh的含義。 HH是24小時。

如有疑問,請閱讀custom date and time format strings的文檔。

hh記錄爲

The hour, using a 12-hour clock from 01 to 12."

HH被記錄爲:

The hour, using a 24-hour clock from 00 to 23.

作爲進一步的說明,此評論表明潛在的概念上的誤差:

I can see that the DateTime? variable "dateSent" has a 24-hour clock timestamp eg 14:50:34

DateTime值不是h ave的格式。這只是一個日期和時間。正如int的值爲16時,取決於您如何格式化,它同時爲「0x10」和「16」,DateTime也是如此。沒有任何格式可以與價值結合 - 僅僅調用ToString()的結果將取決於文化設置。

+1

@Teifi:請參閱我的編輯其他重要的注意事項 - 您應該區分值和任何文本表示他們。 – 2013-04-05 15:28:52

+0

謝謝你提醒我! – 2013-04-05 15:32:19

5

爲小時的使用大寫字母:

HH:mm:ss 
^^ 
+2

非常感謝羅伯特,不幸的是,我不能將每個答案都記錄下來,儘管他們都很棒。 +1 – 2013-04-05 15:25:39

10

應當作爲資本簡單的H公司的

HH:mm:ss 

Here is a decent link to string formating date times

從文章:

DateTime dt = new DateTime(2008, 3, 9, 16, 5, 7, 123); 

注意,小時是16

String.Format("{0:h hh H HH}",  dt); // "4 04 16 16"  hour 12/24 
+1

非常感謝。該死的,我希望我可以接受多個答案。 – 2013-04-05 15:23:38

4

如果你想顯示一個24小時的字符串使用以下format string

HH:mm:ss 

希望它可以幫助

相關問題