Ответ 1
Как насчет:
dateTime.ToString("tt", CultureInfo.InvariantCulture);
Ниже приведен код:
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
?
Как насчет:
dateTime.ToString("tt", CultureInfo.InvariantCulture);
string.Format("{0:hh:mm:ss tt}", DateTime.Now)
Это должно дать вам строковое значение времени. tt должен добавить am/pm.
Вы также можете посмотреть соответствующую тему:
DateTime
всегда должен находиться внутри "американского" (григорианского) календаря. Так что если вы делаете
var str = dateTime.ToString(@"yyyy/MM/dd hh:mm:ss tt", new CultureInfo("en-US"));
вы должны получить то, что хотите, во многих меньших строках.
очень просто, используя формат строки
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 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, и ничего больше!!
однако, когда я использовал ПК, что его культура не является английским.. (в моем случае ARABIC).. мое приложение не получилось, потому что формат "tt" возвратил что-то новое не AM и PM (م или ص)..
Таким образом, исправить это было, чтобы игнорировать культуру, добавив второй аргумент следующим образом:
dateTime.ToString("tt", CultureInfo.InvariantCulture);
.. конечно, вам нужно добавить: using System.Globalization; поверх файла ur Я надеюсь, что это поможет кому-то:)
+ PC.GetHour(datetime) > 11 ? "pm" : "am"
Для вашего примера, но есть лучшие способы форматирования даты и времени.
От: http://www.csharp-examples.net/string-format-datetime/
string.Format("{0:t tt}", datetime); // -> "P PM" or "A AM"
Что-то вроде bool isPM = GetHour() > 11
. Но если вы хотите отформатировать дату в строке, вам не нужно делать это самостоятельно. Для этого используйте форматирование даты.
Вы можете протестировать его таким образом
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);
string AM_PM = string.Format("{0:hh:mm:ss tt}", DateTime.Now).Split(new char[]{' '})[1];