我正在修改一个全球化的Web应用程序,该应用程序为每个登录用户使用存储的CultureInfo。
客户希望时间数据输入被本地化。显示不是问题,因为格式化已经可用。但是我需要检测当前cultureinfo是24小时还是上午/下午所以我可以显示正确的输入框(而不仅仅是文本字段)。
我最初的想法是检查CultureInfo的DateTimeInfo属性,看看ShortTimePattern是否包含大写H或小写h,但这对我来说不够健壮。
有更好的方法吗?我已经阅读了两者的类属性,但除非我遗漏了什么,否则我看不到任何现有的方法或属性。
答案 0 :(得分:7)
我认为没有更好的方法来获取这些信息。文化的时间模式可以包含任何内容(用户甚至可以创建自定义文化,其中ShortTimePattern是“\ hello”,然后DateTime.ToString()
将随时返回“hello”)。在这种情况下,框架如何确定CultureInfo是24小时格式还是12小时格式?
所以“普通”DateTimeFormatInfo.ShortTimePattern
必然包含'h'或'H',否则小时将不会显示。我想你可以按照你最初的想法检查一下。您还可以检查“h”或“H”是否未在我的“\ hello”示例中使用\来转义,因为这不代表小时:)
答案 1 :(得分:6)
最强大的方法是检查DateTimeFormatInfo.AMDesignator是否为空字符串。
if (DateTimeFormatInfo.CurrentInfo.AMDesignator == "")
//24hour format
else
//12hour format
答案 2 :(得分:5)
检查' /' h'似乎比检查AM / PM指示符更强大。 一个很好的例子是en-gb: 时间格式字符串为HH:mm,AM / PM指示符设置为AM / PM Windows将以24小时格式显示时间! 这似乎是一个不一致的定义,但检查' H'修复了我的错误。