2012-03-16 49 views
0

我正在編輯管理員窗體,我從數據庫中填充兩個DropDownLists(小時和分鐘)。我需要從數據庫中返回的DateTime對象中提取小時數(12 hour format)和分鐘數。以下是我已經試過:從DateTime中提取值

DateTime dt = DateTime.Parse(biz.GetStartDateByID(classID).ToString()); 
int hrs = Convert.ToDateTime(dt.ToString()).Hour; 

爲 「2012-03-08 22:45:00.000」 在DB,這給 「22」 了幾個小時。以12小時格式和分鐘提取小時的最佳方式是什麼?例如,如果DateTime對象中的小時值是「18」,那麼我需要它爲「6」。

回答

0
int hrs24 = dt.Hour; 
int hrs12 = hrs24 > 12 ? hrs24 - 12 : (hrs24 == 0 ? 12 : hrs24); 
+0

謝謝約翰,我想我需要休息一下! – IrishChieftain 2012-03-16 04:29:32

+0

這不適用於午夜。 – 2012-03-16 04:55:37

+0

屬性是「小時」,而不是「小時」。 – 2012-03-16 04:56:16

1

試試這個:

String.Format("{0:hh}", dt); 

這將爲您提供12小時零填充格式的小時。

對於沒有零填充:

String.Format("{0:h}", dt); 
+2

則DateTime.ToString( )有一個直接支持格式的重載:DateTime.Now.ToString(「{hh}」)。 – 2012-03-16 04:30:27

+0

謝謝指出。 – 2012-03-16 04:32:21

+0

@ DPeden,當您將格式說明符傳遞給ToString時,不需要大括號;實際上我懷疑包括他們會引發異常。 – phoog 2012-03-16 04:44:35

0

只要使用正確的格式的日期時間爲字符串轉換

DateTime dt = DateTime.Parse(biz.GetStartDateByID(classID).ToString()); 
int hrs = Convert.ToDateTime(dt.ToString("hh:mm:ss")).Hour; 

僅供參考,請看看this

+0

我試過使用「h」說明符,但得到了空例外 - 在文章中,它說這已經改變了。 – IrishChieftain 2012-03-16 04:38:14

+0

我剛剛更新了我的答案。 「hh:mm:ss」給了我正確的價值。 – ABH 2012-03-16 04:58:42

+0

如果你閱讀這個問題,你會看到我只對幾小時(12小時制)和分鐘感興趣;沒有其他的... – IrishChieftain 2012-03-16 04:59:45