2013-09-30 314 views
2

我使用DateTime.TryParseExact功能使用得到的變量datetime值下面的代碼獲取日期時間變量的24小時時間格式

DateTime dt; 
CultureInfo provider = CultureInfo.InvariantCulture; 
System.Globalization.DateTimeStyles style = DateTimeStyles.None; 
string[] format = new string[] { "d/MMM/yy H:m:s tt","d-MMM-yy H:m:s tt" }; 
string strDate = "24-May-13 12:03:03 AM"; 
DateTime.TryParseExact(strDate, format, provider, style, out dt); 

現在它做什麼它正確地解析日期時間,給我造成24-May-2013 12:03:03 但我希望它能像這樣回報我24-May-2013 00:03:033

我該怎麼做?

+1

你確定這是一個*解析*問題,而不僅僅是一個*顯示*問題? –

+0

在調試'dt'顯示我'24-May-2013 12:03:03'這是有點錯誤,因爲時間在AM –

+0

這不能回答我的問題。你可以檢查'DateTime'的'Hour'屬性,是12還是0? –

回答

6

使用小寫h您的格式,測試以下的LINQPad

void Main() 
{ 
    CultureInfo provider = CultureInfo.InvariantCulture; 
    System.Globalization.DateTimeStyles style = DateTimeStyles.None; 
    string[] format = new string[] { "d/MMM/yy h:m:s tt","d-MMM-yy h:m:s tt" }; 
    //          ^    ^
    //           +------ here -------+ 
    string strDate = "24-May-13 12:03:03 AM"; 

    DateTime dt; 
    if (DateTime.TryParseExact(strDate, format, provider, style, out dt)) 
    { 
     dt.Dump(); 
     dt.Hour.Dump(); 
    } 
} 

輸出:

24.05.2013 00:03:03 
0 
+1

但'H'用於24小時格式,那麼爲什麼我應該在這裏使用'h'。 –

+2

因爲你沒有解析24小時格式。您正在解析12小時格式。在內部,DateTime值被存儲爲完全不同的東西,可以很好地處理24小時。這只是一個解析和顯示問題。你的格式用AM/PM說明符指定24小時格式,這是一個不正確的組合,所以切換到小寫'h'。 –

3

您應該使用

HH:MM:SS

用於顯示時間以24小時格式(與日期一起)。

警告:

作爲公認的答案中指出,這個如果你試圖解析已在24小時供應格式的日期正常工作。否則,您使用小寫'h'

+0

查看更多日期時間格式@ http://msdn.microsoft.com/en-us/library/zdtaw1bw.aspx –

+0

這不會解析'24-May-13 2:3:3' –

+0

@RajeevKumar只需使用「H :m:s「並查看[自定義日期和時間格式字符串](http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx)。 –

1

您遇到的問題是H以24小時格式查找小時,並完全忽略daypart說明符。改爲使用12小時格式說明符h

1

試試這個
日期時間日期時間= DateTime.Now;

串strMinFormat =則DateTime.ToString( 「HH:MM:SS TT」); //12小時格式
串strMaxFormat =則DateTime.ToString( 「HH:MM:SS TT」); //24小時格式

相關問題