用于在任何文化中匹配短日期模式的正则表达式

时间:2013-03-24 13:53:46

标签: c# regex date date-format

我需要一个自定义正则表达式来计算短日期模式(等“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,...)。这是可能的,实际上我只需要知道哪个部分是年,月或日,但我无法在任何地方找到它。请帮帮我......
  • 有效的公共范围:日[1-31] {1-2},月[1-12] {1-2},年[1600-9999] {4}

1 个答案:

答案 0 :(得分:1)

正如吉姆和我建议的那样,你可以遍历所有文化:

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