11

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

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

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

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

4

3 回答 3

7

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

因此,“正常”DateTimeFormatInfo.ShortTimePattern必须包含“h”或“H”,否则将不会显示小时。我认为您可以按照最初的想法进行检查。您还可以检查 'h' 或 'H' 是否没有像我的 "\hello" 示例中的 \ 进行转义,因为那不代表小时 :)

于 2009-07-16T02:36:33.393 回答
6

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

于 2015-12-25T00:53:20.603 回答
4

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

if (DateTimeFormatInfo.CurrentInfo.AMDesignator == "")
  //24hour format
else
  //12hour format
于 2015-02-24T14:16:36.603 回答