如何从DateTime获取12小时的日期

时间:2009-08-20 13:24:02

标签: c# datetime

当我获得DateTime.Hour属性时,我总是得到24小时的时间(因此下午6点会给我18个)。

我如何获得“12小时”时间,所以下午6点才给我6个。

我显然可以自己做检查,但我认为有一个内置功能。<​​/ p>

6 个答案:

答案 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