.net当我知道文化信息时,我如何知道12/24小时格式



在.net中,当我知道区域性信息时,我如何知道12/24小时的时间格式?有没有一种简单的方法来检测culoter信息指定的时间格式?

我需要知道的是,文化是否应该使用12/24小时的时间格式。我知道有些文化可以同时使用12/24小时制。但是当我们使用DateTime时,默认的时间格式是什么呢。ToShortTimeString()?我们如何知道默认的时间格式是12或24?

一种方法是查看格式字符串:

CultureInfo.GetCultureInfo("cs-CZ").DateTimeFormat.ShortTimePattern.Contains("H")

如果格式字符串包含H,则表示它使用的是24小时。如果它包含htt,则为12小时。

不过,这更像是一个肮脏的破解,而不是一个合适的解决方案(我不确定它是否适用于所有文化——你可能需要处理转义)。问题是,你为什么还要决定12/24小时?只需为给定的区域性使用正确的格式即可。

两者都可以,因为没有什么可以阻止对ToShortTimeString()使用12和对ToLongTimeString()使用24的培养基,反之亦然。

然而,考虑到调用ToShortTimeString()与调用DateTimeFormat.Format(this, "t", DateTimeFormatInfo.CurrentInfo)相同,我们可以将其与以下答案中的方法一起使用:

[Flags]
public enum HourRepType
{
  None = 0,
  Twelve = 1,
  TwentyFour = 2,
  Both = Twelve | TwentyFour
}
public static HourRepType FormatStringHourType(string format, CultureInfo culture = null)
{
  if(string.IsNullOrEmpty(format))
    format = "G";//null or empty is treated as general, long time.
  if(culture == null)
    culture = CultureInfo.CurrentCulture;//allow null as a shortcut for this
  if(format.Length == 1)
    switch(format)
    {
      case "O": case "o": case "R": case "r": case "s": case "u":
        return HourRepType.TwentyFour;//always the case for these formats.
      case "m": case "M": case "y": case "Y":
        return HourRepType.None;//always the case for these formats.
      case "d":
          return CustomFormatStringHourType(culture.DateTimeFormat.ShortDatePattern);
      case "D":
        return CustomFormatStringHourType(culture.DateTimeFormat.LongDatePattern);
      case "f":
        return CustomFormatStringHourType(culture.DateTimeFormat.LongDatePattern + " " + culture.DateTimeFormat.ShortTimePattern);
      case "F":
        return CustomFormatStringHourType(culture.DateTimeFormat.FullDateTimePattern);
      case "g":
        return CustomFormatStringHourType(culture.DateTimeFormat.ShortDatePattern + " " + culture.DateTimeFormat.ShortTimePattern);
      case "G":
        return CustomFormatStringHourType(culture.DateTimeFormat.ShortDatePattern + " " + culture.DateTimeFormat.LongTimePattern);
      case "t":
        return CustomFormatStringHourType(culture.DateTimeFormat.ShortTimePattern);
      case "T":
        return CustomFormatStringHourType(culture.DateTimeFormat.LongTimePattern);
      default:
        throw new FormatException();
    }
  return CustomFormatStringHourType(format);
}
private static HourRepType CustomFormatStringHourType(string format)
{
  format = new Regex(@"('.*')|("".*"")|(\.)").Replace(format, "");//remove literals
  if(format.Contains("H"))
    return format.Contains("h") ? HourRepType.Both : HourRepType.TwentyFour;
  return  format.Contains("h") ? HourRepType.Twelve : HourRepType.None;
}

打电话给FormatStringHourType("t"),看看是12小时还是24小时(或者可能两者都没有,但这很奇怪)。

类似地,FormatStringHourType("T")会告诉我们关于长时间字符串的情况。

相关内容

  • 没有找到相关文章

最新更新