Как получить значение AM / PM из DateTime?
код, о котором идет речь ниже:
public static string ChangePersianDate(DateTime dateTime)
{
System.Globalization.GregorianCalendar PC = new System.Globalization.GregorianCalendar();
PC.CalendarType = System.Globalization.GregorianCalendarTypes.USEnglish;
return
PC.GetYear(dateTime).ToString()
+ "/"
+ PC.GetMonth(dateTime).ToString()
+ "/"
+ PC.GetDayOfMonth(dateTime).ToString()
+ ""
+ PC.GetHour(dateTime).ToString()
+ ":"
+ PC.GetMinute(dateTime).ToString()
+ ":"
+ PC.GetSecond(dateTime).ToString()
+ " "
????????????????
}
Как я могу получить AM / PM от dateTime значение?
13 ответов:
string.Format("{0:hh:mm:ss tt}", DateTime.Now)Это должно дать вам строковое значение времени. tt должен добавить am / pm.
вы также можете посмотреть на соответствующей теме:
The
DateTimeвсегда должно быть внутренне в "американском" (григорианском) календаре. Так что если вы делаетеvar str = dateTime.ToString(@"yyyy/MM/dd hh:mm:ss tt", new CultureInfo("en-US"));вы должны получить то, что вы хотите в гораздо меньшем количестве строк.
очень просто с помощью строкового формата
on
.ToSTring("") :
если вы используете "чч" - > > час, используя 12-часовые часы с 01 до 12.
если вы используете "HH" - > > час, используя 24-часовые часы с 00 до 23.
если вы добавите" tt " - > > обозначение Am/Pm.
exemple преобразование с 23: 12 до 11: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();подождите секунду, это еще не все вам нужно заботиться о чем-то другом-это культура системы, потому что тот же код выполняется на windows с другим языком особенно с difrent культуры langage будет генерировать difrent результат с тем же кодом
exemple окон, установленных на арабский язык культуры будет отображаться следующим образом:
// 23:12 م
م означает вечер (первое письмо مساء) .
в другой культуре системы зависит от того, что установлено на региональном и языковом параметре windows, это покажу / / 23: 12 du.
вы можете переключаться между различными форматами на панели управления windows в разделе Windows regional and language -> текущий формат (combobox) и изменить... примените его, выполните перестройку (выполнение) своего приложения и посмотрите, о чем я говорю.
Итак, кто я могу заставить показывать слова 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 PmInvariantCulture = > использование английского формата по умолчанию.
еще один вопрос я хочу, чтобы pm был на арабском или определенном языке, даже если я использую windows, установленный на английский (или другой язык) региональный формат?
Soution для арабского 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 Arabic ar-BH ar-BH Arabic (Bahrain) ar-DZ ar-DZ Arabic (Algeria) ar-EG ar-EG Arabic (Egypt) big list...дайте мне знать, если у вас есть еще один вопрос .
Я знаю, что это может показаться очень поздно.. однако это может помочь кому-то там
Я хотел получить AM PM часть даты, поэтому я использовал то, что Энди посоветовал:
dateTime.ToString("tt");я использовал эту часть, чтобы создать путь для сохранения файлов.. Я построил свои предположения, что я получу либо AM, либо PM и ничего больше !!
однако, когда я использовал ПК, его культура не является английской ..(в моем случае арабский).. мое приложение не удалось, потому что формат" tt " вернулся что-то новое не являюсь ни ПМ (م или ص)..
таким образом, исправление этого состояло в том, чтобы игнорировать культуру, добавив второй аргумент следующим образом:
dateTime.ToString("tt", CultureInfo.InvariantCulture);.. конечно, вы должны добавить: с помощью системы.Глобализация; поверх файла ur Надеюсь, это кому-то поможет :)
+ PC.GetHour(datetime) > 11 ? "pm" : "am"для вашего примера, но есть лучшие способы форматирования datetime.
от: http://www.csharp-examples.net/string-format-datetime/
string.Format("{0:t tt}", datetime); // -> "P PM" or "A AM"
что-то вроде
bool isPM = GetHour() > 11. Но если вы хотите отформатировать дату в строку, вам не нужно делать это самостоятельно. Используйте форматирование даты функции для этого.
его довольно просто
Date someDate = new DateTime(); string timeOfDay = someDate.ToString("hh:mm tt"); // hh - shows hour and mm - shows minute - tt - shows AM or PM
вы можете проверить это таким образом
Console.WriteLine(DateTime.Now.ToString("tt "));вывод будет выглядеть так:
AMили
PM
вот более простой способ вы можете написать формат времени
(hh:mm:ss tt)и отображать их отдельно, если вы хотите.string time = DateTime.Now.Hour.ToString("00") + ":" + DateTime.Now.Minute.ToString("00") + ":" + DateTime.Now.Second.ToString("00") + DateTime.Now.ToString(" tt");или просто:
DateTime.Now.ToString("hh:mm:ss tt")
вот пример кода:
DateTime time = DateTime.Now; string AM_PM; AM_PM = time.ToLongTimeString().Substring(time.ToLongTimeString().Length - 2);
Comments