web-dev-qa-db-fra.com

Comment valider le format DateTime?

Je suis supposé laisser l'utilisateur entrer un format DateTime, mais je dois le valider pour vérifier s'il est acceptable. L'utilisateur peut entrer "aaaa-MM-jj" et tout ira bien, mais il peut également entrer "MM/aaaaMM/jj" ou toute autre combinaison. Y a-t-il un moyen de valider cela?

15
Kevin Cho

Je ne connais aucun moyen de valider le format entré, car vous souhaitez parfois inclure intentionnellement des caractères qui se traduisent par n'importe quoi. Une chose que vous pourriez envisager est de permettre à l'utilisateur de s'auto-valider en affichant un aperçu de la traduction du format entré.

9
Jason

Cherchez-vous quelque chose comme ça?

DateTime expectedDate;
if (!DateTime.TryParse("07/27/2012", out expectedDate))
{
    Console.Write("Luke I am not your datetime.... NOOO!!!!!!!!!!!!!!");
}

Si votre utilisateur connaît le (s) format (s) exact (s) requis ...

string[] formats = { "MM/dd/yyyy", "M/d/yyyy", "M/dd/yyyy", "MM/d/yyyy" };
DateTime expectedDate;
if (!DateTime.TryParseExact("07/27/2012", formats, new CultureInfo("en-US"), 
                            DateTimeStyles.None, out expectedDate))
{
    Console.Write("Thank you Mario, but the DateTime is in another format.");
}
22
Hans Z

Je suppose que vous voulez savoir si la chaîne de format spécifiée est valide ...

Pour cela, vous pouvez aller-retour:

    private bool IsValidDateFormat(string dateFormat)
    {
        try
        {
            String dts=DateTime.Now.ToString(dateFormat);
            DateTime.ParseExact(dts, dateFormat, CultureInfo.InvariantCulture);
            return true;
        }
        catch (Exception)
        {
            return false;
        }
    }
5
ZipXap

Sauf si je ne me souviens pas correctement, les seules chaînes de format DateTime non valides ont un caractère Vous pouvez supposer qu'une chaîne de format DateTime de 2 caractères ou plus est valide.

DateTime.ParseExact("qq", "qq", null) == DateTime.Today
DateTime.ParseExact("myy", "501", null) == "05/01/2001"

Standard (1 caractère)
Personnalisé (> 1 caractère)

Pour référence, les chaînes de caractères uniques autorisées en tant que formats:

d,D,f,F,g,G,m,M,o,O,r,R,s,T,u,U,y,Y

Tout autre caractère, tel que q, n'est pas valide en soi. Toutes les autres chaînes seront analysées avec succès en tant que chaînes de formatage.

3
Guvante

Vous ne parlez pas de votre stratégie de validation. Quoi qu'il en soit, vous devez utiliser quelque chose impliquant des expressions régulières et appliquer les modèles autorisés. Cela aiderait contre la validité formelle .. alors vous devez prendre soin du contenu réel et vous assurer que les valeurs sont correctes selon que mois, jour et année.

Quoi qu'il en soit, plusieurs personnes ont suggéré d'utiliser la méthode DateTime.TryParse () pour laisser le substrat prendre soin de vous. Mais vous devrez quand même préciser le format! donc il n'y a pas de magie! vous tomberiez dans l'ambiguïté autrement

0
Diego De Vita

Cela fonctionne pour moi-

try
{
  String formattedDate = DateTime.Now.ToString(dateFormat);
  DateTime.Parse(formattedDate);
  return true;
}
catch (Exception)
{
  return false;
}
0
akash singh

Ma solution consistait à marquer le champ d'entrée en lecture seule et à permettre aux utilisateurs de modifier la valeur uniquement avec jqueryui datepicker .

C'est intuitif. Vous pouvez spécifier votre format préféré et il suffit de valider ce format.

0
Aleksandr Khomenko