TryParseExact()拒绝有效格式

我正在解析 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;
}

注意,我在上面给出了一个 null FormatProvider,当我提供一个 CultureInfo对象作为 此参数的 (CultureInfo provider = new CultureInfo("en-US"))

我错过了什么?

135751 次浏览

试试:

 DateTime.TryParseExact(txtStartDate.Text, formats,
System.Globalization.CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.None, out startDate)

这是 Simple 方法 UseParseExact

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);

这应该对你有用。

在这里你可以检查一些东西。

  1. 正确使用的日期格式。您可以为 DateTime.TryParseExact提供多种格式。检查完整的格式列表,可用的 给你
  2. 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
    }
    
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

试试 C # 7.0

var Dob= DateTime.TryParseExact(s: YourDateString,format: "yyyyMMdd",provider: null,style: 0,out var dt)
? dt : DateTime.Parse("1800-01-01");