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)
由于任何人谁可以帮助我与此有关。
答
就像你提到的大多数人一样,我想我会选择一个带日期选择器或下拉菜单的方法。 但对于那些谁有兴趣在另一种解决方案:
我想了一会儿不同的格式,发现他们在大多数情况下非常相似。所以我写了一个方法,返回更经常使用的模式的最佳匹配版本。所以'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):_ - _” 美国
等...
我认为让用户从某个日期选择器控件中选择一个日期会更好。 – 2010-07-01 12:08:09
你的问题更大。如果输入是2/2,那是'2 feb'还是'feb 2002'?短期格式将无法提供帮助。 – 2010-07-01 12:15:53
您不清楚您是否知道用户的首选日期格式,或者您想从输入字符串中推断出它。如果你知道用户的国籍(或偏好),那么你知道这些数字的含义,你只需要解析它们。从输入字符串推断格式有点复杂... – Andy 2010-07-01 12:29:22