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

Преобразование значения временного интервала для форматирования "hh: mm Am/Pm" с использованием С#

У меня есть значение, хранящееся в переменной типа System.TimeSpan следующим образом.

System.TimeSpan storedTime = 03:00:00;

Можно ли сохранить его в другой переменной типа String следующим образом?

String displayValue = "03:00 AM";

И если переменная storedTime имеет значение

storedTime = 16:00:00;

то он должен быть преобразован в:

String displayValue = "04:00 PM";
4b9b3361

Ответ 1

Вы можете сделать это, добавив свой временной интервал к дате.

TimeSpan timespan = new TimeSpan(03,00,00);
DateTime time = DateTime.Today.Add(timespan);
string displayTime = time.ToString("hh:mm tt"); // It will give "03:00 AM"

Ответ 2

بسم الله الرحمان الرحيم

очень просто, используя формат строки

on .ToSTring("") :

  • если вы используете "hh" → > Час, используя 12-часовые часы с 01 до 12.

  • если вы используете "HH" → > Час, используя 24-часовые часы от 00 до 23.

  • если вы добавите "tt" → > Обозначение Am/Pm.

пример конвертирования с 23:12 до 11:12 Pm:

        DateTime d = new DateTime(1, 1, 1, 23, 12, 0);
        var res = d.ToString("hh:mm tt");   // this show  11:12 Pm
        var res2 = d.ToString("HH:mm");  // this show  23:12

        Console.WriteLine(res);
        Console.WriteLine(res2);

        Console.Read();

Подождите секунду, что не все, что вам нужно, чтобы заботиться о чем-то еще, - это система Culture, потому что тот же код выполняется в окнах с другим langage especialy с разной культурой langage будет генерировать отличный результат с тем же кодом

пример окон, установленных в культуре арабского языка, будет выглядеть следующим образом:

//23:12 م

م означает Вечер (первый leter of مساء).

в другой системной культуре зависит от того, что задано на региональной и языковой опциях Windows, оно отобразит // 23:12 du.

вы можете изменить между разными форматами на панели управления Windows под региональными и языковыми версиями Windows → текущий формат (combobox) и изменить... применить его, выполнить перестройку (выполнение) вашего приложения и посмотреть, о чем говорит iam.

так кто же я могу заставить показывать слова Am и Pm на английском языке, если культура текущей системы не установлена ​​на английский?

легко, просто добавив две строки: →

первый шаг добавить using System.Globalization; поверх вашего кода

и модификация предыдущего кода будет выглядеть следующим образом:

     DateTime d = new DateTime(1, 1, 1, 23, 12, 0);
     var res = d.ToString("HH:mm tt", CultureInfo.InvariantCulture); // this show  11:12 Pm

InvariantCulture = > с использованием стандартного английского формата.

Еще один вопрос: я хочу, чтобы pm был на арабском или конкретном языке, даже если я использую Windows, установленный на региональном (или другом языке) региональном формате?

Soution for Arabic Exemple:

        DateTime d = new DateTime(1, 1, 1, 23, 12, 0);
        var res = d.ToString("HH:mm tt", CultureInfo.CreateSpecificCulture("ar-AE")); 

это покажет // 23:12 م

если моя система настроена на формат английского языка. вы можете изменить "ar-AE", если хотите использовать другой формат. есть список каждого языка и его формат.

примеры: ar ar-SA Арабский ar-BH ar-BH Арабский (Бахрейн) ar-DZ ar-DZ Арабский (Алжир) ar-EG ar-EG Арабский (Египет)

...

Заставьте меня знать, что у вас есть другой вопрос.

Ответ 4

Выполнение некоторых ответов на существующие ответы здесь:

public static string ToShortTimeSafe(this TimeSpan timeSpan)
{
    return new DateTime().Add(timeSpan).ToShortTimeString();
} 

public static string ToShortTimeSafe(this TimeSpan? timeSpan)
{
    return timeSpan == null ? string.Empty : timeSpan.Value.ToShortTimeSafe();
}

Ответ 5

string displayValue="03:00 AM";

Это момент времени, а не продолжительность (TimeSpan).

Итак, что-то не так с вашим базовым дизайном или предположениями.

Если вы хотите его использовать, сначала вам нужно сначала преобразовать его в DateTime (момент времени). Вы можете форматировать DateTime без части даты, которая была бы вашей искомой строкой.

TimeSpan t1 = ...;
DateTime d1 = DateTime.Today + t1;               // any date will do
string result = d1.ToString("hh:mm:ss tt");

storeTime переменная может иметь значение, например,      storeTime=16:00:00;

Нет, оно может иметь значение 4 часа, но представление двоично, TimeSpan не может записать разницу между 16:00 и 4 pm.

Ответ 6

Вам нужно будет получить объект DateTime из вашего TimeSpan, а затем вы можете легко его отформатировать.

Одним из возможных решений является добавление времени к любой дате с нулевым значением времени.

var timespan = new TimeSpan(3, 0, 0);
var output = new DateTime().Add(timespan).ToString("hh:mm tt");

Выходное значение будет "03:00 AM" (для английского языка).

Ответ 7

Разбирайте время до DateTime, а затем используйте Format ( "hh: mm: tt" ). Например.

TimeSpan ts = new TimeSpan(16, 00, 00);
DateTime dtTemp = DateTime.ParseExact(ts.ToString(), "HH:mm:ss", CultureInfo.InvariantCulture);
string str = dtTemp.ToString("hh:mm tt");

str будет:

str = "04:00 PM"

Ответ 8

Сначала вам нужно преобразовать временной интервал в структуру DateTime:

var dt = new DateTime(2000, 12, 1, timeSpan.Hours, timeSpan.Minutes, timeSpan.Seconds)

Затем вам нужно преобразовать значение в строку с Short Time format

var result = dt.ToString("t"); // Convert to string using Short Time format

Ответ 9

Parse timespan to DateTime. For Example.    
//The time will be "8.30 AM" or "10.00 PM" or any time like this format.
    public TimeSpan GetTimeSpanValue(string displayValue) 
        {   
            DateTime dateTime = DateTime.Now;
                if (displayValue.StartsWith("10") || displayValue.StartsWith("11") || displayValue.StartsWith("12"))
                          dateTime = DateTime.ParseExact(displayValue, "hh:mm tt", CultureInfo.InvariantCulture);
                    else
                          dateTime = DateTime.ParseExact(displayValue, "h:mm tt", CultureInfo.InvariantCulture);
                    return dateTime.TimeOfDay;
                }

Ответ 10

Вы можете попробовать следующее:

   string timeexample= string.Format("{0:hh:mm:ss tt}", DateTime.Now);

вы можете удалить hh или mm или ss или tt в соответствии с вашими потребностями где чч час в 12 ч формиат, мм - минуты, ss - секунды, а tt - AM/PM.

Ответ 11

Вы не можете добавить AM/PM к TimeSpan. В любом случае вам нужно связать значение TimaSpan с DateTime, если вы хотите отобразить время в 12-часовом формате часов.

TimeSpan не предназначен для использования с 12-часовым форматом часов, потому что здесь мы говорим о интервале времени.

Как говорится в документации;

A TimeSpan объект представляет временной интервал (продолжительность времени или прошедшее время), который измеряется как положительное или отрицательное количество дней, часов, минут, секунд и долей секунды, Структура TimeSpan также может использоваться для представления времени суток, но только если время не связано с конкретной датой. В противном случае вместо этого следует использовать структуру DateTime или DateTimeOffset.

Также Документы Microsoft описывают следующее:

Значение A TimeSpan может быть представлено как [-]d.hh:mm:ss.ff, где дополнительный знак минус указывает отрицательный интервал времени, компонент d - дни, hh - часы, измеренные на 24-часовом часы, mm - минуты, ss - секунды, а ff - доли секунды.

Итак, в этом случае вы можете отображать с использованием AM/PM следующим образом.

TimeSpan storedTime = new TimeSpan(03,00,00);
string displayValue = new DateTime().Add(storedTime).ToString("hh:mm tt");


Боковое примечание:
Также следует отметить, что свойство TimeOfDay DateTime - это TimeSpan, где оно представляет

a интервал времени, который представляет собой долю дня, прошедшего с полуночи.