C# 文化资讯;DateTimeInfo:如何检查是否为24小时时间?

C# 文化资讯;DateTimeInfo:如何检查是否为24小时时间?,c#,globalization,cultureinfo,C#,Globalization,Cultureinfo,我正在修改一个全球化的web应用程序,它为每个登录的用户使用存储的CultureInfo 客户端希望将时间数据输入本地化。显示不是问题,因为格式已经可用。但是,我需要检测当前的cultureinfo是24小时还是am/pm,以便显示正确的输入框(而不仅仅是文本字段) 我最初的想法是检查CultureInfo的DateTimeInfo属性,看看ShortTimePattern是否包含大写字母H或小写字母H,但这对我来说不够健壮 有更好的办法吗?我已经阅读了这两个类的类属性,但除非我遗漏了什么,否则

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

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

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


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

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


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

最可靠的方法是检查是否为空字符串

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

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

谢谢@mlessard-检查转义字符是个好主意。在这个阶段我可能不会这么做,因为我们没有使用自定义文化,这是非常简单的东西;利用制度全球化;命名空间My.Extensions{public static class CultureInfo Extensions{public static bool Is24HourTime(此CultureInfo区域性){return culture.DateTimeFormat.ShortTimePattern.Contains(“H”);}}这是“DateTimeFormatInfo.CurrentInfo.AMDesignator”,但正是我所需要的,谢谢您分享!作为旁注:不幸的是,这在Unity中不起作用,其中“DateTimeFormatInfo.CurrentInfo.AMDesignator”包含“AM”,即使时钟设置为24小时时间格式(Mac OSX)。我不同意这个答案。我刚刚在windows中打开了格式设置,并选择AM和PM符号并保存。您的代码现在给我的结果是AM,但系统仍然使用24小时格式。当然,我是手工做的(上午9点),所以你认为这不算……但是。。我不同意:)这不能称为最健壮的方式。@Tommix这是五年前的事了(还有几个.NET版本):)