Как получить значение 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 значение?

691   13  

13 ответов:

Как насчет:

dateTime.ToString("tt", CultureInfo.InvariantCulture);
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 Pm

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

еще один вопрос я хочу, чтобы 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);
string AM_PM = string.Format("{0:hh:mm:ss tt}", DateTime.Now).Split(new char[]{' '})[1];

Comments

    Ничего не найдено.