У меня есть значение, хранящееся в переменной следующего типа System.TimeSpan
.
System.TimeSpan storedTime = 03:00:00;
Могу ли я повторно сохранить его в другой переменной следующего типа String
?
String displayValue = "03:00 AM";
И если storedTime
переменная имеет значение
storedTime = 16:00:00;
тогда его нужно преобразовать в:
String displayValue = "04:00 PM";
datepicker value + TimeofDay
?ShortTimePattern
вместо этого использовать :string displayTime = time.ToString("t" [, culture]);
time.ToShortTimeString()
Очень просто, используя строковый формат
на
.ToSTring("") :
если вы используете «чч» - >> Час в 12-часовом формате от 01 до 12.
если вы используете «ЧЧ» - >> Час в 24-часовом формате от 00 до 23.
если добавить "tt" - >> Обозначение Am / Pm.
Пример преобразования с 23:12 до 23:12:
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();
подождите секунду, это не все, что вам нужно, чтобы заботиться о чем-то еще, это системная культура, потому что один и тот же код, выполняемый в окнах с другим языком, особенно с другим языком культуры, будет генерировать другой результат с тем же кодом
Пример окон, настроенных на культуру арабского языка, будет выглядеть следующим образом:
// 23:12 м
م означает Вечер (первое письмо مساء).
в другой системной культуре зависит от того, что установлено в региональных и языковых параметрах Windows, будет отображаться // 23:12 du.
вы можете переключаться между разными форматами на панели управления Windows в разделе региональных и языковых окон → текущий формат (поле со списком) и изменить ... применить его, выполнить перестройку (выполнить) вашего приложения и посмотреть, о чем я говорю.
Итак, кто я могу заставить показывать слова 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 => с использованием английского формата по умолчанию.
еще один вопрос. Я хочу, чтобы вечера были на арабском или определенном языке, даже если я использую для Windows региональный формат на английском (или другом языке)?
Сюжет для арабского образца:
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
Строки стандартных форматов даты и времени
источник
11:57 pm
и это сработало:TimeSpan time = new TimeSpan(23, 57, 00); DateTime date_with_time = mydate.Add(time);
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");
Нет, он может иметь значение 4 часа, но представление двоичное, TimeSpan не может записывать разницу между
16:00
и4 pm
.источник
DateTime.TimeOfDay
возвращаетTimeSpan
- Microsoft приводит вас к этому дизайну :(DateTime
, если бы он был, то это («03:00 AM») было бы просто примером этого. Однако я вижу, что для большинства случаев использования этот дизайн (относительныйDateTime
) чрезмерно усложнит проблемы (конечно, это за счет усложнения выполнения очень конкретной работы с датами, временем, абсолютным или нет. , часовые пояса и т. д.)DateTime
еще больше (это уже достаточно плохо). Должен быть тип, представляющий «время дня» - это, конечно, именно то, что я реализовал в Noda Time. Всякий раз, когда вы пытаетесь объединить множество различных концепций в небольшое количество типов, вы обязательно столкнетесь с подобными проблемами.DateTime
,TimeOfDay
иDate
.03:00 AM
это не «момент времени». Это «точка в день».Выполняя некоторые попытки совмещения существующих ответов здесь:
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(); }
источник
Вам нужно будет получить
DateTime
объект из вашего,TimeSpan
и тогда вы сможете легко его отформатировать.Одно из возможных решений - добавить временной интервал к любой дате с нулевым значением времени.
var timespan = new TimeSpan(3, 0, 0); var output = new DateTime().Add(timespan).ToString("hh:mm tt");
Выходное значение будет
"03:00 AM"
(для английского языка).источник
Вы не можете добавить AM / PM к файлу
TimeSpan
. В любом случае вам придется связатьTimaSpan
значение с,DateTime
если вы хотите отображать время в 12-часовом формате.TimeSpan
не предназначен для использования с 12-часовым форматом времени, потому что здесь мы говорим о временном интервале .Как написано в документации ;
Также Microsoft Docs описывает следующее:
Таким образом, в этом случае вы можете отображать с помощью AM / PM следующим образом.
TimeSpan storedTime = new TimeSpan(03,00,00); string displayValue = new DateTime().Add(storedTime).ToString("hh:mm tt");
Боковое примечание :
также следует отметить, что свойство TimeOfDay
DateTime
- это aTimeSpan
, где оно представляетисточник
Разберите временной интервал до DateTime, а затем используйте Format ("чч: мм: 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"
источник
Вы можете попробовать это:
string timeexample= string.Format("{0:hh:mm:ss tt}", DateTime.Now);
вы можете удалить hh, mm, ss или tt в соответствии с вашими потребностями, где hh - это час в 12-часовом формате, mm - минуты, ss - секунды, а tt - AM / PM.
источник
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; }
источник
Сначала вам нужно преобразовать временной интервал в структуру DateTime:
var dt = new DateTime(2000, 12, 1, timeSpan.Hours, timeSpan.Minutes, timeSpan.Seconds)
Затем вам нужно преобразовать значение в строку с коротким форматом времени
var result = dt.ToString("t"); // Convert to string using Short Time format
источник