как получить 12-часовую дату от DateTime - PullRequest
6 голосов
/ 20 августа 2009

когда я получаю свойство DateTime.Hour, я всегда получаю 24-часовое время (поэтому 6 вечера дадут мне 18).

как мне узнать время "12 часов", чтобы 6 вечера давали мне 6.

Я, очевидно, могу сделать проверку сам, но я предполагаю, что для этого есть встроенная функция.

Ответы [ 6 ]

18 голосов
/ 20 августа 2009

Как насчет:

DateTime.Hour % 12 

Это даст 0-11, конечно ... Вы хотите 1-12? Если так:

((DateTime.Hour + 11) % 12) + 1

Я не думаю есть что-то более простое встроенное ...

5 голосов
/ 20 августа 2009

DateTime.Now.ToString ( "чч");-> Используя это, вы получите «06» в течение 18 часов.

3 голосов
/ 20 августа 2009

Я не знаю ни одного встроенного метода, но вы всегда можете добавить метод расширения для достижения этой цели.

Конечно, вы всегда можете заменить код так, как вы хотите его выполнить.

public static class Extension
{
    public static int GetTwelveCycleHour(this DateTime dateTime)
    {
        if (dateTime.Hour > 12)
        {
            return dateTime.Hour - 12;
        }

        return dateTime.Hour;
    }
}
2 голосов
/ 18 апреля 2012

А как же просто:

public static int GetTwelveCycleHour(this DateTime dateTime)
{
    return Convert.ToInt32(dateTime.ToString("h"));
}
1 голос
/ 20 августа 2009

Нет встроенной функции, в основном потому, что она вам не нужна:

  • Если вы делаете это для вывода пользователю, посмотрите на использование строки формата.
  • Если вы делаете это для расчета, вы можете вычесть дату и время напрямую.

Помимо этого, математический расчет достаточно прост и уже доступен в других ответах здесь.

0 голосов
/ 02 марта 2019

Я думаю, что наиболее удобный ответ представил Джон Скит. Ниже то же самое, но преобразовано в Visual Basic. Мне нравится, когда все очень просто. Мне потребовалось несколько, чтобы понять преобразование C # в Visual Basic. Я также включил некоторые «дополнительные» вещи. Надеюсь, это сэкономит кому-то еще время.

Visual Basic

(((DateTime.Now().Hour + 11) Mod 12) + 1)

Extra

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 апреля = 04

День: 3 = 03

час: 10 = 10

5 минут = 05

stringDate = 201904031005

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...