2012-08-17 7 views
28

Ich analysiere einen DateTime-Wert in einer ASP.NET WebForms-Seite und der Datumsstring wird immer wieder von der DateTime.TryParseExact()-Methode abgelehnt, obwohl sie eindeutig einer der angegebenen Formatzeichenfolgen entspricht.DateTime.TryParseExact() gültige Formate ablehnen

Es scheint auf meiner Entwicklung Maschine zu Hause zum Scheitern verurteilt, aber auf dem Produktionsserver zu arbeiten, so dass ich von lokalen Datumseinstellungen dächte beteiligt, aber dieser Fehler tritt auf, auch wenn ich ein IFormatProvider (CultureInfo) Objekt als Parameter

liefern hier ist der Code:

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

Hinweis ich bin ein null FormatProvider in der oben geben, aber das gleiche Problem tritt auf, wenn ich ein CultureInfo Objekt als (CultureInfo provider = new CultureInfo("en-US")) für diesen Parameter liefern.

Was fehlt mir?

+2

In der US-Kultur, Datumsformate m/d/y d/m/y nicht – StuartLC

+1

Auch ohne Formatprovider zu erwähnen, scheint dieser Code zu funktionieren für mich. Versuchen Sie, InvariantCulture anzugeben. – danish

Antwort

39

Versuchen:

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

Dies ist die einfache Methode verwenden 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); 

Dies sollte für Sie arbeiten.

6

Hier können Sie nach einigen Dingen suchen.

  1. Datumsformate, die Sie richtig verwenden. Sie können mehr als ein Format für DateTime.TryParseExact bereitstellen. Überprüfen Sie die vollständige Liste der verfügbaren Formate here.
  2. CultureInfo.InvariantCulture was eher Problem hinzufügen. Anstatt also einen NULL Wert oder an CultureInfo provider = new CultureInfo("en-US") zu übergeben, können Sie es wie folgt schreiben. .

    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 
    }