web-dev-qa-db-fra.com

DateTime.TryParseExact () rejetant les formats valides

J'analyse une valeur DateTime dans une page ASP.NET WebForms Et la chaîne de date continue à être rejetée par la méthode DateTime.TryParseExact() même si elle correspond clairement à l'une des chaînes de format fournies.

Cela semble échouer sur ma machine de développement à la maison mais sur le serveur de production. Je pense donc aux paramètres de date locaux, mais cette erreur se produit même lorsque je fournis un objet IFormatProvider (CultureInfo) en tant que paramètre.

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

Remarque Je donne un null FormatProvider Dans ce qui précède, mais le même problème se produit lorsque je fournis un objet CultureInfo comme (CultureInfo provider = new CultureInfo("en-US")) Pour ce paramètre.

Qu'est-ce que je rate?

54
see sharper

Essayer:

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

Ici, vous pouvez vérifier quelques choses.

  1. Formats de date que vous utilisez correctement. Vous pouvez fournir plusieurs formats pour DateTime.TryParseExact. Consultez la liste complète des formats disponibles ici .
  2. CultureInfo.InvariantCulture Qui est plus susceptible d'ajouter un problème. Ainsi, au lieu de passer une valeur NULL ou à la valeur CultureInfo provider = new CultureInfo("en-US"), vous pouvez l'écrire comme. .

    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
    }
    
8
Amnesh Goel

C’est la méthode simple, utiliser 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);

Cela devrait fonctionner pour vous.

6
Jidheesh Rajan

Essayez C # 7.0

var Dob= DateTime.TryParseExact(s: YourDateString,format: "yyyyMMdd",provider: null,style: 0,out var dt)
 ? dt : DateTime.Parse("1800-01-01");
2
Waleed A.K.
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);

Pour plus https://msdn.Microsoft.com/en-us/library/ms131044 (v = vs.110) .aspx

1
islam elgaidi