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

问题描述:

为了在搜索方法中使用,我想解析不同格式的部分日期。 我想让用户搜索日,月,月,年或者日,月,年。C# - 解析不同格式的部分日期

但更有问题的是,我想要在所有可能的日期格式,这取决于国家,用户所在。这是一个ASP.NET页面,我可以使用CultureInfo,因此也CultureInfo.DateTimeFormat。

你有什么想法,该怎么做?我认为,英国人可以搜索16/05,而美国人可以进入05/16,或者德国人可以用16.05找到5月16日的结果,这是非常棒的。

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

我想使用像

public void GetDateParts(string SearchStr, out int? day, out int? month, out int? year) 

由于任何人谁可以帮助我与此有关。

+1

我认为让用户从某个日期选择器控件中选择一个日期会更好。 – 2010-07-01 12:08:09

+1

你的问题更大。如果输入是2/2,那是'2 feb'还是'feb 2002'?短期格式将无法提供帮助。 – 2010-07-01 12:15:53

+0

您不清楚您是否知道用户的首选日期格式,或者您想从输入字符串中推断出它。如果你知道用户的国籍(或偏好),那么你知道这些数字的含义,你只需要解析它们。从输入字符串推断格式有点复杂... – Andy 2010-07-01 12:29:22

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

我想了一会儿不同的格式,发现他们在大多数情况下非常相似。所以我写了一个方法,返回更经常使用的模式的最佳匹配版本。所以'd.m.y.' - >'d.m.y'或'd/m y' - >'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 /月/
  • DMY
  • DMY
  • Y/M/d
  • ymd
  • ymd
  • 米/ d/Y
  • m.d.y

这些仅是3个不同的格式通过解析正则表达式如果使用[/.-]为分隔符。

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

您可以定义一些输入格式,然后在表单中强制其中一个(基于用户信息)。喜欢的东西:

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

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

等...