为了在搜索方法中使用,我想以不同的格式解析部分日期。 我希望用户能够搜索日,月,月,年或日,月,年。
但更有问题的是,我希望以所有可能的日期格式执行此操作,具体取决于用户所在的国家/地区。它是一个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)
感谢任何可以帮助我的人。
答案 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:
如果对分隔符使用[/.-],这些只有3种不同的格式用于通过正则表达式进行解析。
P.S。仍然无法解决部分日期的问题。但是可以搜索所有文化的完整日期。
答案 1 :(得分:0)
您可以定义多种输入格式,然后在表单中强制执行其中一种格式(基于用户信息)。类似的东西:
“为英国人输入日期(DD-MM):_ - _”
“为美国人输入日期(MM-DD):_ - _”
等...