用于匹配任何区域性中的短日期模式的正则表达式

本文关键字:日期 模式 正则表达式 任何 区域性 用于 | 更新日期: 2023-09-27 18:05:37

我需要一个自定义正则表达式来计算短日期模式(等)。"M/dd/yyyy", "dd/mm/yyyy", "yyyy/mm/dd",…取决于文化…)然后我可以得到日,月,年,像这样解析格式:

    string input = "03/24/2013";
    Match m = Regex.Match(input, @"^(?<day>'d{1,2})/(?<month>'d{1,2})/(?<year>'d{4})$");
    if( m.Success )
    {
        DateTime d = new DateTime(int.Parse(m.Groups["year"].Value),
                                  int.Parse(m.Groups["month"].Value),
                                  int.Parse(m.Groups["day"].Value));
    }

但是!这个表达式不支持所有的格式,所以

:

  • 只接受'/'作为分隔符。
  • 适用于各种文化(如en-US, th-TH, jp-JP等)的所有短日期模式(仅限日期,也可以是Time)。这是可能的吗,实际上我只需要知道哪一部分是年,月或日,但我找不到它。请帮帮我…
  • 有效通用范围:日[1-31]{1-2},月[1-12]{1-2},年[1600-9999]{4}

用于匹配任何区域性中的短日期模式的正则表达式

正如Jim和我建议的那样,您可以遍历所有文化:

foreach (var culture in CultureInfo.GetCultures(CultureTypes.SpecificCultures))
{
    DateTime result;
    if (DateTime.TryParseExact(text, "d", culture, DateTimeStyles.None,
                               out result))
    {
        // Valid - return, or whatever
    }
}

注意"d"是短日期模式的标准格式字符串。或者,您可以使用culture.DateTimeFormat.ShortDatePattern .