Как я могу получить значение AM / PM из DateTime? - PullRequest
177 голосов
/ 24 октября 2011

Код ниже:

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 ]

327 голосов
/ 24 октября 2011

Как насчет:

dateTime.ToString("tt", CultureInfo.InvariantCulture);
97 голосов
/ 24 октября 2011
string.Format("{0:hh:mm:ss tt}", DateTime.Now)

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

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

Как узнать текущее время дня?

40 голосов
/ 24 октября 2011

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

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

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

27 голосов
/ 22 июля 2015

Очень просто с использованием формата строки

на .ToSTring("") :

  • если вы используете «чч» - >> Час, используя 12-часовые часы с 01 по 12.

  • , если вы используете «ЧЧ» - >> Час, используя 24-часовые часы с 00 до 23.

  • если добавить «tt» - >> Обозначение Am / Pm.

пример преобразования из 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 с другим языком особенно с использованием разных языков культуры, результат будет с одинаковым кодом

пример окон с арабской языковой культурой покажет так:

// 23:12 م

م означает Вечер (первый текст مساء).

в другой системной культуре зависит от того, что установлено в региональных и языковых параметрах Windows, будет отображаться // 23:12 du.

Вы можете переключаться между различными форматами на панели управления Windows в Windows регион и язык -> текущий формат (выпадающий список) и изменять ... применить это сделать перестроить (выполнить) вашего приложения и посмотреть, о чем идет речь.

Так, кого я могу заставить показывать Am и Pm Words на английском языке, если культура текущей системы не установлена ​​на английский?

легко, просто добавив две строки: ->

первый шаг добавить 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 => с использованием английского формата по умолчанию.

другой вопрос Я хочу, чтобы вечера были на арабском или конкретном языке, даже если я использую окна, настроенные на английский (или другой язык) региональный формат?

Соус на арабском языке Пример:

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

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

17 голосов
/ 03 февраля 2014

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

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

dateTime.ToString("tt");

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

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

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

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

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

9 голосов
/ 05 июня 2018

это довольно просто

  Date someDate = new DateTime();
  string timeOfDay = someDate.ToString("hh:mm tt"); 
  // hh - shows hour and mm - shows minute - tt - shows AM or PM
8 голосов
/ 24 октября 2011

От: http://www.csharp -examples.net / string-format-datetime /

string.Format("{0:t tt}", datetime);  // -> "P PM"  or "A AM"
8 голосов
/ 24 октября 2011
+ PC.GetHour(datetime) > 11 ? "pm" : "am"

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

4 голосов
/ 24 октября 2011

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

1 голос
/ 30 мая 2016

Вы можете проверить это следующим образом

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

Вывод будет выглядеть следующим образом:

AM

или

PM
...