【问题标题】:How to determine if current culture/locale uses am/pm or 24-hour time?如何确定当前文化/区域设置是使用上午/下午还是 24 小时制?
【发布时间】:2011-09-04 23:53:56
【问题描述】:

我需要确定当前的文化/区域设置是使用上午/下午时间还是 24 小时时间。

起初我以为我可以这样做:

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

但后来我阅读了该线程 Get just the hour of day from DateTime using either 12 or 24 hour format as defined by the current culture 上最后一个答案的 cmets,这似乎暗示这不起作用。

我想我可以格式化任意时间,然后分析结果,但肯定有更简单的方法吗?

编辑:

另请参阅下面的评论 - 我只想确定我应该选择包含小时列表的两个预先格式化的常量字符串中的哪一个,并希望避免很多不必要的扭曲 - 我只需要一个是/否的答案无论这是上午/下午文化还是 24 小时文化。

该程序是一个 WinForms 程序,如果有帮助的话。

【问题讨论】:

  • 我需要选择两个预先生成的恒定小时列表之一,“9 10 11 12 13 14 15 16 17”或“9 10 11 12 1 2 3 4 5”,具体取决于关于文化。我希望不必经历很多涉及日期时间和格式等方面的扭曲。
  • 首先,您应该编辑您的问题以包含该信息。其次,您使用的是 Windows 窗体吗?网络表格?银光?
  • 这是一个 Windows 窗体程序。

标签: .net time


【解决方案1】:

尝试检查DateTimeFormat.ShortTimePattern 是否包含H。如果是,则系统使用的是 24 小时制

【讨论】:

  • 谢谢,这看起来是正确的方法。但是只测试“H”不是更正确吗? (或“HH”,但这将是多余的。)
  • 另外一个非常小的问题 - 我可以看到您将 WinForms 添加为我的问题的标签,但我的问题和您的答案不是独立于所使用的演示系统吗?
  • 1) 你是对的,我编辑了我的答案 2) 我这样做只是因为你说你在 Winforms 中这样做。不确定 Silverlight 和 WPF 是否有不同的方法。
  • 检查 Contains("t") 怎么样
【解决方案2】:

如果可以的话,只是一个小小的补充。根据 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());
        }
    }
}

【讨论】:

    猜你喜欢
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    • 2015-06-02
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    相关资源
    最近更新 更多