2012-08-17 23 views
28

Parsuję wartość DateTime na stronie ASP.NET WebForms, a ciąg daty wciąż jest odrzucany przez metodę DateTime.TryParseExact(), mimo że wyraźnie pasuje do jednego z dostarczonych ciągów formatów.DateTime.TryParseExact() odrzuca prawidłowe formaty

Wydaje zawieść na moim komputerze deweloperskim w domu, ale działa na serwerze produkcyjnym, więc myślę lokalnych ustawień daty jest zaangażowany, ale błąd ten występuje nawet wtedy, gdy dostarczy przedmiot IFormatProvider (CultureInfo) jako parametr

Oto kod:

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

Uwaga daję się null FormatProvider w powyższym ale ten sam problem występuje, gdy zapewniają CultureInfo przedmiot (CultureInfo provider = new CultureInfo("en-US")) dla tego parametru.

Czego mi brakuje?

+2

W amerykańskiej kulturze, formaty daty są m/d/r nie D/M/Y – StuartLC

+1

Nawet bez wymieniania FormatProvider, kod ten wydaje się działać dobrze dla mnie. Spróbuj podać InvariantCulture. – danish

Odpowiedz

39

Spróbuj:

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

Jest to prosta metoda, Korzystanie 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); 

ten powinien pracować dla Ciebie.

6

Tutaj możesz sprawdzić kilka rzeczy.

  1. Formaty daty używane poprawnie. Możesz podać więcej niż jeden format dla DateTime.TryParseExact. Sprawdź pełną listę formatów, dostępnych here.
  2. CultureInfo.InvariantCulture co jest bardziej prawdopodobne, dodać problem. Zamiast więc podać wartość NULL, ustawiając ją na CultureInfo provider = new CultureInfo("en-US"), można ją zapisać jako. .

    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 
    } 
    
Powiązane problemy