see*_*per 60 .net c# cultureinfo
我正在解析ASP.NET WebForms页面中的DateTime值,并且日期字符串一直被DateTime.TryParseExact()方法拒绝,即使它明确匹配提供的格式字符串之一.
它似乎在我家的开发机器上失败但在生产服务器上工作,所以我在考虑涉及本地日期设置,但即使我提供一个IFormatProvider (CultureInfo)对象作为参数,也会发生此错误
这是代码:
DateTime startDate;
string[] formats = { "dd/MM/yyyy", "dd/M/yyyy", "d/M/yyyy", "d/MM/yyyy",
"dd/MM/yy", "dd/M/yy", "d/M/yy", "d/MM/yy"};
var errStart = row.FindControl("errStartDate"); //my date format error message
if (!DateTime.TryParseExact(txtStartDate.Text, formats, null, DateTimeStyles.None, out startDate))
{
errStart.Visible = true; //we get here even with a string like "20/08/2012"
return false;
}
else
{
errStart.Visible = false;
}
Run Code Online (Sandbox Code Playgroud)
注意我null FormatProvider在上面给出了一个,但是当我为这个参数提供一个CultureInfo对象
时会出现同样的问题(CultureInfo provider = new CultureInfo("en-US")).
我错过了什么?
Adi*_*dov 89
尝试:
DateTime.TryParseExact(txtStartDate.Text, formats,
System.Globalization.CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.None, out startDate)
Run Code Online (Sandbox Code Playgroud)
在这里你可以检查几件事情.
DateTime.TryParseExact.查看完整的格式列表,可在此处获取. CultureInfo.InvariantCulture这更有可能增加问题.因此,您可以将其写为,而不是传递NULL值或将其设置为CultureInfo provider = new CultureInfo("en-US")..
if (!DateTime.TryParseExact(txtStartDate.Text, formats,
System.Globalization.CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.None, out startDate))
{
//your condition fail code goes here
return false;
}
else
{
//success code
}
Run Code Online (Sandbox Code Playgroud)这是Simple方法,使用ParseExact
CultureInfo provider = CultureInfo.InvariantCulture;
DateTime result;
String dateString = "Sun 08 Jun 2013 8:30 AM -06:00";
String format = "ddd dd MMM yyyy h:mm tt zzz";
result = DateTime.ParseExact(dateString, format, provider);
Run Code Online (Sandbox Code Playgroud)
这应该适合你.