[英]DateTime.TryParse for any culture
为此有很多线程,但是我仍然在以下方面受阻:
我有的:
我正在尝试构建Windows Phone应用,它将选择一个人的出生日期
背后的代码:
string dateString = "";
DateTime dt = DateTime.Now;
if (value != null && DateTime.TryParse(value.ToString(), culture, DateTimeStyles.None, out dt))
{
if (dt.Equals(DateTime.MinValue))
{
//dateString = "mm/dd/yyyy";
return "";
}
else
return dt.ToShortDateString();
}
else
return dateString;
}
我需要的:
我希望它解析任何与文化无关的日期格式。
我试过的
1.我尝试使用CultureInfo.InvariantCultute,CultureInfo.CurrentCulture
2.使用ExactParser尝试如下:
string[] formats = {"M/d/yyyy h:mm:ss tt", "M/d/yyyy h:mm tt", "d/M/yyyy hh:mm:ss tt", "dd/MM/yyyy hh:mm:ss tt", "d/M/yyyy" , "dd/MM/yyyy" , "M/d/yyyy" ,"MM/dd/yyyy",
"MM/dd/yyyy hh:mm:ss", "M/d/yyyy h:mm:ss", "dd/MM/yyyy hh:mm:ss", "d/M/yyyy h:mm:ss",
"M/d/yyyy hh:mm tt", "M/d/yyyy hh tt", "d/M/yyyy hh:mm tt", "d/M/yyyy hh tt",
"M/d/yyyy h:mm", "M/d/yyyy h:mm", "d/M/yyyy h:mm", "d/M/yyyy h:mm",
"MM/dd/yyyy hh:mm", "M/dd/yyyy hh:mm","dd/MM/yyyy hh:mm", "dd/M/yyyy hh:mm"};
if (value != null && DateTime.TryParseExact(value.ToString(), format, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt))
但这太硬了,无法涵盖几种情况。
有什么方法可以选择任何格式的DOB?
任何帮助,将不胜感激。 谢谢!!
并非如此,因为每个人都有自己的日期格式。
您基本上想做的是从上述XKCD 漫画的后半部分神奇地推断出日期。 ;)
也就是说,您可以尝试并执行此操作的唯一方法是,以您认为可能的每种格式解析一个字符串,然后在解析成功的每种情况下进行完整性检查。 但是,要进行上述健全性检查会很困难... 11-02是2月11日还是11月2日? 您需要某种上下文。
抱歉,但这似乎是不可能的,因为日期时间可能不明确 ,这就是为什么会误解例如
"01/02/03"
是
01 Feb 2003 (Russia)
02 Jan 2003 (USA)
03 Feb 2001 (China)
这将尝试所有文化:
public static bool TryParseAnyDate(string dateValue, out DateTime result)
{
result = DateTime.MinValue;
foreach (CultureInfo cultureInfo in CultureInfo.GetCultures(CultureTypes.AllCultures))
{
if (DateTime.TryParse(dateValue, cultureInfo, DateTimeStyles.None, out result))
{
return true;
}
}
return false;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.