Подтвердить что ты не робот

Как конвертировать 24-часовой формат TimeSpan в 12-часовой формат TimeSpan?

У меня есть данные TimeSpan, представленные в виде 24-часового формата, такие как 14:00:00, я хочу преобразовать его в 12-часовой формат, 2:00 PM, я googled и нашел что-то связанное в stackoverflow и msdn, но didn Решить эту проблему, может ли кто-нибудь мне помочь? Спасибо заранее.

Обновление Кажется, что можно конвертировать 24-часовой формат TimeSpan в String, но невозможно преобразовать строку в 12-часовой формат TimeSpan: (

Но у меня все еще есть МНОГО хороших ответов, спасибо!

4b9b3361

Ответ 1

TimeSpan представляет временной интервал, а не время суток. Структура DateTime более вероятно, что вы ищете.

Ответ 2

(Подводя мои разрозненные комментарии в один ответ.)

Сначала вам нужно понять, что TimeSpan представляет временной интервал. Этот интервал времени внутренне представляется как количество тиков, а не строка 14:00:00, а строка 2:00 PM. Только когда вы преобразовываете TimeSpan в строку, имеет смысл говорить о двух разных представлениях строк. Переход от одного представления к другому не изменяет или не конвертирует количество тиков, хранящихся в TimeSpan.

Время записи 2:00 PM вместо 14:00:00 относится к форматированию даты и времени и культуре. Все это обрабатывается классом DateTime.

Однако, хотя TimeSpan представляет временной интервал, он вполне подходит для представления времени суток (DateTime.TimeOfDay возвращает a TimeSpan). Поэтому нецелесообразно использовать его для этой цели.

Для выполнения описанного форматирования вам нужно либо полагаться на логику форматирования DateTime, либо просто создать свой собственный код форматирования.

  • Использование DateTime:

    var dateTime = new DateTime(timeSpan.Ticks); // Date part is 01-01-0001
    var formattedTime = dateTime.ToString("h:mm tt", CultureInfo.InvariantCulture);
    

    Спецификаторы формата, используемые в ToString, описаны на странице Пользовательские строки даты и времени на MSDN. Важно указать CultureInfo, который использует желаемый обозначение AM/PM. В противном случае спецификатор формата tt может быть заменен пустой строкой.

  • Использование пользовательского форматирования:

    var hours = timeSpan.Hours;
    var minutes = timeSpan.Minutes;
    var amPmDesignator = "AM";
    if (hours == 0)
      hours = 12;
    else if (hours == 12)
      amPmDesignator = "PM";
    else if (hours > 12) {
      hours -= 12;
      amPmDesignator = "PM";
    }
    var formattedTime =
      String.Format("{0}:{1:00} {2}", hours, minutes, amPmDesignator);
    

    По общему признанию, это решение довольно сложнее, чем первый метод.

Ответ 3

Вам нужно сначала преобразовать TimeSpan в объект DateTime, а затем использовать любой формат DateTime:

var t = DateTime.Now.TimeOfDay;

Console.WriteLine(new DateTime(t.Ticks).ToString("hh:mm:ss tt"));

ToShortTimeString() также будет работать, но он зависит от региональных настроек, поэтому он не будет отображаться правильно (или правильно, в зависимости от того, как вы его видите) в неамериканских системах.

Ответ 4

TimeSpan представляет собой временной интервал (разность между временами), а не дату или время, поэтому нет смысла определять ее в формате 24 или 12 часов. Я предполагаю, что вы действительно хотите DateTime.

Например, сегодня 2 PM:

TimeSpan ts = TimeSpan.FromHours(14);
DateTime dt = DateTime.Today.Add(ts);

Затем вы можете отформатировать эту дату так, как хотите:

String formatted = String.Format("{0:d/M/yyyy hh:mm:ss}", dt); // "12.4.1012 02:00:00" - german (de-DE)

http://msdn.microsoft.com/en-us/library/az4se3k1%28v=vs.100%29.aspx

Ответ 5

Попробуйте этот код:

int timezone = 0;

Эта строка дает 12-часовой формат

string time = DateTime.Now.AddHours(-timezone).ToString("hh:mm:ss tt");

Эта строка дает 24-часовой формат

string time = DateTime.Now.AddHours(-timezone).ToString("hh:mm:ss tt");

Ответ 6

Предполагая, что вы находитесь в 24-часовом диапазоне, вы можете добиться того, чего хотите, вычитая отрицательный TimeSpan из Today DateTime (или любой даты, если на то пошло), затем разделите часть даты:

DateTime dt = DateTime.Today;
dt.Subtract(-TimeSpan.FromHours(14)).ToShortTimeString();

Доходность:

2:00 PM

Ответ 7

String formatted = yourDateTimeValue.ToString("hh:mm:ss tt");

Ответ 8

Это очень просто. Предположим, у нас есть объект ts of TimesSpan: TimeSpan ts = new TimeSpan(); и предположим, что оно содержит какое-то значение, например 14:00:00. Теперь сначала преобразуйте это в строку, а затем в DateTime следующим образом:

TimeSpan ts = new TimeSpan(); // this is object of TimeSpan and Suppose it contains
                              // value 14:00:00
string tIme = ts.ToString(); // here we convert ts into String and Store in Temprary
                             // String variable.
 DateTime TheTime = new DateTime(); // Creating the object of DateTime;
 TheTime = Convert.ToDateTime(tIme); // now converting our temporary string into DateTime;
 Console.WriteLine(TheTime.ToString(hh:mm:ss tt));

Результат будет показан как: 02:00:00 PM