2012-03-16 55 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