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

Ответ 1

Как насчет:

dateTime.ToString("tt", CultureInfo.InvariantCulture);

Ответ 2

string.Format("{0:hh:mm:ss tt}", DateTime.Now)

Это должно дать вам строковое значение времени. tt должен добавить am/pm.

Вы также можете посмотреть соответствующую тему:

Как вы получаете текущее время суток?

Ответ 3

DateTime всегда должен находиться внутри "американского" (григорианского) календаря. Так что если вы делаете

var str = dateTime.ToString(@"yyyy/MM/dd hh:mm:ss tt", new CultureInfo("en-US"));

вы должны получить то, что хотите, во многих меньших строках.

Ответ 4

بسم الله الرحمان الرحيم

очень просто, используя формат строки

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...

сообщите мне, если у вас есть другой вопрос.

Ответ 5

Я знаю, что это может показаться очень запоздалым.. однако это может помочь кому-то там

Я хотел получить AM PM часть даты, поэтому я использовал то, что Энди посоветовал:

dateTime.ToString("tt");

Я использовал эту часть для создания Пути для сохранения моих файлов. Я построил свои предположения, что я получу либо AM, либо PM, и ничего больше!!

однако, когда я использовал ПК, что его культура не является английским.. (в моем случае ARABIC).. мое приложение не получилось, потому что формат "tt" возвратил что-то новое не AM и PM (م или ص)..

Таким образом, исправить это было, чтобы игнорировать культуру, добавив второй аргумент следующим образом:

dateTime.ToString("tt", CultureInfo.InvariantCulture);

.. конечно, вам нужно добавить: using System.Globalization; поверх файла ur Я надеюсь, что это поможет кому-то:)

Ответ 6

+ PC.GetHour(datetime) > 11 ? "pm" : "am"

Для вашего примера, но есть лучшие способы форматирования даты и времени.

Ответ 8

Что-то вроде bool isPM = GetHour() > 11. Но если вы хотите отформатировать дату в строке, вам не нужно делать это самостоятельно. Для этого используйте форматирование даты.

Ответ 9

Вы можете протестировать его таким образом

Console.WriteLine(DateTime.Now.ToString("tt "));

Выход будет таким:

AM

или

PM

Ответ 10

Вот более простой способ записать формат времени (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")

Ответ 11

Вот пример кода:

DateTime time = DateTime.Now;
string AM_PM;
AM_PM = time.ToLongTimeString().Substring(time.ToLongTimeString().Length - 2);

Ответ 12

string AM_PM = string.Format("{0:hh:mm:ss tt}", DateTime.Now).Split(new char[]{' '})[1];