DateTime.TryParseExact()拒绝有效格式(DateTime.TryParseEx

2019-06-27 03:35发布

我在解析DateTime值ASP.NET WebForms页和日期字符串不断得到由拒绝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"))这个参数。

我在想什么?

Answer 1:

尝试:

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


Answer 2:

在这里,您可以检查几件事情。

  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 } 


Answer 3:

这是一个简单的方法,使用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);

这应该为你工作。



Answer 4:

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



Answer 5:

尝试C#7.0

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


文章来源: DateTime.TryParseExact() rejecting valid formats