当我获得DateTime.Hour属性时,我总是得到24小时的时间(因此下午6点会给我18个)。
我如何获得“12小时”时间,所以下午6点才给我6个。
我显然可以自己做检查,但我认为有一个内置功能。</ p>
答案 0 :(得分:18)
怎么样:
DateTime.Hour % 12
那当然会给0-11 ......你想要1-12吗?如果是这样的话:
((DateTime.Hour + 11) % 12) + 1
我不认为有更简单的内置......
答案 1 :(得分:5)
DateTime.Now.ToString( “HH”); - &GT;使用它你将获得“06”18小时。
答案 2 :(得分:3)
我不知道任何内置方法,但您总是可以添加扩展方法来实现此目的。
当然,您总是可以用您想要的方式替换代码。
public static class Extension
{
public static int GetTwelveCycleHour(this DateTime dateTime)
{
if (dateTime.Hour > 12)
{
return dateTime.Hour - 12;
}
return dateTime.Hour;
}
}
答案 3 :(得分:2)
简单地说:
public static int GetTwelveCycleHour(this DateTime dateTime)
{
return Convert.ToInt32(dateTime.ToString("h"));
}
答案 4 :(得分:1)
没有内置功能,主要是因为你不需要它:
除此之外,数学计算很简单,并且已在其他答案中提供。
答案 5 :(得分:0)
我认为最方便的答案是Jon Skeet提交的。下面是相同的,但转换为Visual Basic。我喜欢事情超级简单。我花了一些时间才能弄清楚C#到Visual Basic的转换。我还包括一些“额外”的东西。希望这可以节省其他人的时间。
Visual Basic
(((DateTime.Now().Hour + 11) Mod 12) + 1)
额外
Dim stringDate = DateTime.Now().Year &
DateTime.Now().Month.ToString("00") &
DateTime.Now().Day.ToString("00") & "_" &
(((DateTime.Now().Hour + 11) Mod 12) + 1).ToString("00") &
DateTime.Now().Minute.ToString("00")
ToString("00")
强制每个月/日/小时/分钟始终用两位数字表示。
年份= 2019
月:4月4日= 04
日期:3 = 03
小时:10 = 10
5分钟= 05
stringDate = 201904031005