CultureInfo&DateTimeInfo:如何检查是否是24小时?

我正在修改一个全球化的Web应用程序,它为每个登录用户使用存储的CultureInfo。

客户希望时间数据输入被本地化。 显示不是问题,因为格式化已经可用。 但是我需要检测当前cultureinfo是24小时还是上午/下午所以我可以显示正确的输入框(而不仅仅是文本字段)。

我最初的想法是检查CultureInfo的DateTimeInfo属性,看看ShortTimePattern是否包含大写H或小写h,但这对我来说不够健壮。

有没有更好的办法? 我已经阅读了两者的类属性,但除非我遗漏了什么,否则我看不到任何现有的方法或属性。

我认为没有更好的方法来获取这些信息。 文化的时间模式可以包含任何内容(用户甚至可以创建自定义文化,其中ShortTimePattern是“\ hello”,然后DateTime.ToString()将随时返回“hello”)。 在这种情况下,框架如何确定CultureInfo是24小时格式还是12小时格式?

因此,“正常” DateTimeFormatInfo.ShortTimePattern必须包含’h’或’H’,否则不会显示小时。 我想你可以按照你最初的想法检查一下。 您还可以检查’h’或’H’是否未在我的“\ hello”示例中使用\来转义,因为这不代表小时:)

最强大的方法是检查DateTimeFormatInfo.AMDesignator是否为空字符串。

 if (DateTimeFormatInfo.CurrentInfo.AMDesignator == "") //24hour format else //12hour format 

检查’H’/’h’似乎比检查AM / PM指示符更强大。 一个很好的例子是en-gb:时间格式字符串是HH:mm,AM / PM指示符设置为AM / PM Windows将以24h格式显示时间! 这似乎是一个不一致的定义,但检查’H’修复了我的错误。