C# - 以不同格式解析部分日期

时间:2010-07-01 12:01:44

标签: c# date parsing formats

为了在搜索方法中使用,我想以不同的格式解析部分日期。 我希望用户能够搜索日,月,月,年或日,月,年。

但更有问题的是,我希望以所有可能的日期格式执行此操作,具体取决于用户所在的国家/地区。它是一个ASP.NET页面,我可以使用CultureInfo,因此也可以使用CultureInfo.DateTimeFormat。< / p>

你有什么想法,怎么做那样的事情?我认为一个英国人可以搜索16/05,而一个美国人可以进入05/16,或者德国人可以使用16.05从5月16日找到结果,这将是很棒的。

我认为可以使用DateTimeFormat.ShortDatePattern。但我怎么能用它来获取它们的日,月和年?

我想到了像

这样的用法
public void GetDateParts(string SearchStr, out int? day, out int? month, out int? year)

感谢任何可以帮助我的人。

2 个答案:

答案 0 :(得分:2)

像大多数人提到的那样,我想我会选择一个带有日期选择器或下拉列表的方法。 但对于那些对另一种解决方案感兴趣的人:

我想了一会儿不同的格式,发现它们在大多数情况下非常相似。所以我写了一个方法,返回更常用模式的最佳匹配版本。所以'd.m.y。' - &GT; 'd.m.y'或'd / m y' - &gt; 'D / M / Y'

public static string SimplifyDateFormat(DateTimeFormatInfo DTFI)
{
    StringBuilder SB = new StringBuilder(DTFI.ShortDatePattern.ToLower());

    SB.Replace("m y", "m/y").Replace(" 'г.'", "").Replace(" ", "").Replace("dd", "d")
    .Replace("mm", "m").Replace("yyyy", "y").Replace("yy", "y");

    if (SB[SB.Length - 1] == '.') SB.Remove(SB.Length - 1, 1);
    return SB.ToString();
}

这将可能的格式从26减少到这8:

  • d /米/ Y
  • d.m.y
  • d-M-Y
  • Y / M / d
  • y.m.d
  • Y-M​​-d
  • 米/ d / Y
  • m.d.y

如果对分隔符使用[/.-],这些只有3种不同的格式用于通过正则表达式进行解析。

P.S。仍然无法解决部分日期的问题。但是可以搜索所有文化的完整日期。

答案 1 :(得分:0)

您可以定义多种输入格式,然后在表单中强制执行其中一种格式(基于用户信息)。类似的东西:

“为英国人输入日期(DD-MM):_ - _”

“为美国人输入日期(MM-DD):_ - _”

等...