Ответ 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"
У меня есть значение, хранящееся в переменной типа System.TimeSpan
следующим образом.
System.TimeSpan storedTime = 03:00:00;
Можно ли сохранить его в другой переменной типа String
следующим образом?
String displayValue = "03:00 AM";
И если переменная storedTime
имеет значение
storedTime = 16:00:00;
то он должен быть преобразован в:
String displayValue = "04:00 PM";
Вы можете сделать это, добавив свой временной интервал к дате.
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"
очень просто, используя формат строки
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 Арабский (Египет)
...
Заставьте меня знать, что у вас есть другой вопрос.
Вы можете добавить TimeSpan
к DateTime
, например:
TimeSpan span = TimeSpan.FromHours(16);
DateTime time = DateTime.Today + span;
String result = time.ToString("hh:mm tt");
Демо: http://ideone.com/veJ6tT
04:00 PM
Выполнение некоторых ответов на существующие ответы здесь:
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();
}
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
.
Вам нужно будет получить объект DateTime
из вашего TimeSpan
, а затем вы можете легко его отформатировать.
Одним из возможных решений является добавление времени к любой дате с нулевым значением времени.
var timespan = new TimeSpan(3, 0, 0);
var output = new DateTime().Add(timespan).ToString("hh:mm tt");
Выходное значение будет "03:00 AM"
(для английского языка).
Разбирайте время до 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"
Сначала вам нужно преобразовать временной интервал в структуру 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
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;
}
Вы можете попробовать следующее:
string timeexample= string.Format("{0:hh:mm:ss tt}", DateTime.Now);
вы можете удалить hh или mm или ss или tt в соответствии с вашими потребностями где чч час в 12 ч формиат, мм - минуты, ss - секунды, а tt - AM/PM.
Вы не можете добавить 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 интервал времени, который представляет собой долю дня, прошедшего с полуночи.