web-dev-qa-db-fra.com

Vérification du format de date à partir d'une chaîne en C #

Je veux vérifier si un string contient des dates telles que 1/01/2000 et 10/01/2000 dans dd/MM/yyyy format.

Jusqu'à présent, j'ai essayé cela.

DateTime dDate = DateTime.Parse(inputString);
string.Format("{0:d/MM/yyyy}", dDate); 

Mais comment puis-je vérifier si ce format est correct pour throw an exception?

16
User1204501
string inputString = "2000-02-02";
DateTime dDate;

if (DateTime.TryParse(inputString, out dDate))
{
    String.Format("{0:d/MM/yyyy}", dDate); 
}
else
{
    Console.WriteLine("Invalid"); // <-- Control flow goes here
}
21
Nadeem_MK

vous pouvez utiliser DateTime.ParseExact avec la chaîne de format

DateTime dt = DateTime.ParseExact(inputString, formatString, System.Globalization.CultureInfo.InvariantCulture);

Ci-dessus lèvera une exception si la chaîne donnée n'est pas dans un format donné.

utilisation DateTime.TryParseExact si vous n'avez pas besoin d'exception en cas de format incorrect mais vous pouvez vérifier la valeur de retour de cette méthode pour déterminer si l'analyse de la valeur a réussi ou non.

check Chaînes de format de date et d'heure personnalisées

11
Damith

Je pense qu'une des solutions est d'utiliser DateTime.ParseExact ou DateTime.TryParseExact

DateTime.ParseExact(dateString, format, provider);

source: http://msdn.Microsoft.com/en-us/library/w2sa9yss.aspx

5
KrishnaDhungana

https://msdn.Microsoft.com/es-es/library/h9b85w22 (v = vs.110) .aspx

string[] formats= {"M/d/yyyy h:mm:ss tt", "M/d/yyyy h:mm tt", 
                     "MM/dd/yyyy hh:mm:ss", "M/d/yyyy h:mm:ss", 
                     "M/d/yyyy hh:mm tt", "M/d/yyyy hh tt", 
                     "M/d/yyyy h:mm", "M/d/yyyy h:mm", 
                     "MM/dd/yyyy hh:mm", "M/dd/yyyy hh:mm"};
  string[] dateStrings = {"5/1/2009 6:32 PM", "05/01/2009 6:32:05 PM", 
                          "5/1/2009 6:32:00", "05/01/2009 06:32", 
                          "05/01/2009 06:32:00 PM", "05/01/2009 06:32:00"}; 
  DateTime dateValue;

  foreach (string dateString in dateStrings)
  {
     if (DateTime.TryParseExact(dateString, formats, 
                                new CultureInfo("en-US"), 
                                DateTimeStyles.None, 
                                out dateValue))
        Console.WriteLine("Converted '{0}' to {1}.", dateString, dateValue);
     else
        Console.WriteLine("Unable to convert '{0}' to a date.", dateString);
  }
1

Essaye ça

DateTime dDate;
dDate = DateTime.TryParse(inputString);
String.Format("{0:d/MM/yyyy}", dDate); 

voir ce lien pour plus d'informations. http://msdn.Microsoft.com/en-us/library/ch92fbc1.aspx

0
Ajay P

Utilisez un tableau de format de dates valide, vérifiez docs :

string[] formats = { "d/MM/yyyy", "dd/MM/yyyy" };
DateTime parsedDate;
var isValidFormat= DateTime.TryParseExact(inputString, formats, new CultureInfo("en-US"), DateTimeStyles.None, out parsedDate);

if(isValidFormat)
{
    string.Format("{0:d/MM/yyyy}", parsedDate);
}
else
{
    // maybe throw an Exception
}
0
Yasel

vous pouvez toujours essayer:

Regex r = new Regex(@"\d{2}/\d{2}/\d{4}");

r.isMatch(inputString);

cela vérifiera que la chaîne est au format "02/02/2002" vous aurez peut-être besoin d'un peu plus si vous voulez vous assurer que c'est une date valide comme jj/mm/aaaa

0
Silverstar