我正在解析ASP.NET WebForms
页面中的DateTime值,并且日期字符串一直被DateTime.TryParseExact()
方法拒绝,即使它与提供的格式字符串之一明显匹配。
我家的开发机器似乎失败但是在生产服务器上工作,所以我在考虑涉及本地日期设置,但即使我提供IFormatProvider (CultureInfo)
对象作为参数,也会出现此错误/ p>
以下是代码:
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;
}
注意我在上面提供null FormatProvider
,但是当我提供CultureInfo
对象时会出现同样的问题
(CultureInfo provider = new CultureInfo("en-US"))
表示此参数。
我错过了什么?
答案 0 :(得分:79)
尝试:
DateTime.TryParseExact(txtStartDate.Text, formats,
System.Globalization.CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.None, out startDate)
答案 1 :(得分:8)
在这里你可以检查几件事情。
DateTime.TryParseExact
提供多种格式。查看完整的格式列表here。 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
}
。
<h1>
答案 2 :(得分:6)
这是Simple方法,使用ParseExact
CultureInfo provider = CultureInfo.InvariantCulture;
DateTime result;
dateString = "Sun 08 Jun 2013 8:30 AM -06:00";
format = "ddd dd MMM yyyy h:mm tt zzz";
result = DateTime.ParseExact(dateString, format, provider);
这应该适合你。
答案 3 :(得分:1)
string DemoLimit = "02/28/2018";
string pattern = "MM/dd/yyyy";
CultureInfo enUS = new CultureInfo("en-US");
DateTime.TryParseExact(DemoLimit, pattern, enUS,
DateTimeStyles.AdjustToUniversal, out datelimit);
了解更多https://msdn.microsoft.com/en-us/library/ms131044(v=vs.110).aspx
答案 4 :(得分:1)
尝试C#7.0
var Dob= DateTime.TryParseExact(s: YourDateString,format: "yyyyMMdd",provider: null,style: 0,out var dt)
? dt : DateTime.Parse("1800-01-01");