Как определить, использует ли текущая культура / локаль am / pm или 24-часовое время? - PullRequest
7 голосов
/ 05 сентября 2011

Мне нужно определить, установлена ​​ли текущая культура / локаль для использования времени am / pm или 24-часового времени.

Сначала я подумал, что смогу сделать это:

bool time24Hour = Thread.CurrentThread.CurrentCulture.DateTimeFormat.AMDesignator == "";

Но потом я прочитал комментарии к последнему ответу в этой теме Получите только час дня из DateTime, используя либо12 или 24-часовой формат, как определено текущей культурой , что, по-видимому, подразумевает, что это не будет работать.

Полагаю, я мог бы отформатировать произвольное время и затем проанализировать результаты, но наверняка есть более простой способ?

РЕДАКТИРОВАТЬ:

См. Также мой комментарий ниже - я простохочу определить, какую из двух предварительно отформатированных константных строк, содержащих списки часов, я должен выбрать, и надеюсь избежать множества ненужных искажений - мне просто нужен ответ да / нет относительно того, является ли это культура am / pm или24-часовая культура.

Программа - это программа WinForms, если это поможет.

Ответы [ 2 ]

10 голосов
/ 05 сентября 2011

Попробуйте проверить, содержит ли DateTimeFormat.ShortTimePattern H.Если это так, система использует 24-часовое время

2 голосов
/ 10 июня 2013

Просто небольшое дополнение, если можно. Основываясь на ответе dario_ramos, я превратил это в метод расширения с вспомогательным юнит-тестом, который проходит мою систему (проверяет 378 культур).

public static class DateTimeExtensions
{
    public static bool Is24Hrs(this CultureInfo cultureInfo)
    {
        return cultureInfo.DateTimeFormat.ShortTimePattern.Contains("H");
    }
}

[TestClass]
public class DateTimeExtensionTests
{
    [TestMethod]
    public void Unit_Can_Determine_If_Culture_Uses_24HrTime()
    {
        var cultures = CultureInfo.GetCultures(CultureTypes.AllCultures);
        foreach (var cultureInfo in cultures)
        {
            Thread.CurrentThread.CurrentCulture = cultureInfo;
            var datetime = new DateTime(2000, 1, 1, 23, 0, 0);
            var formatted = datetime.ToString("t");
            var is24Hrs = formatted.Contains("23");
            Assert.AreEqual(is24Hrs, cultureInfo.Is24Hrs());
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...