Conversion de la chaîne formatée dd/mm/yyyy en datetime

Je suis novice en DotNet et C#. Je veux convertir une chaîne de caractères au format mm/dd/yyyy en objet DateTime. J'ai essayé la fonction parse comme ci-dessous mais une erreur d'exécution s'est produite.

DateTime dt=DateTime.Parse("24/01/2013");

Une idée sur la façon dont je peux le convertir en datetime ?

Solution

Vous devez utiliser [DateTime.ParseExact][1] avec le format "dd/MM/yyyy".

DateTime dt=DateTime.ParseExact("24/01/2013", "dd/MM/yyyy", CultureInfo.InvariantCulture);

Il est plus sûr d'utiliser le format d/M/yyyy, car il permet de gérer les jours/mois à un et deux chiffres. Mais cela dépend vraiment si vous attendez des valeurs à un ou deux chiffres.


Votre format de date "jour/mois/année" pourrait être un format de date acceptable pour certaines cultures. Par exemple, pour la culture canadienne en-CA, DateTime.Parse fonctionnerait comme suit :

DateTime dt = DateTime.Parse("24/01/2013", new CultureInfo("en-CA"));

Ou

System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-CA");
DateTime dt = DateTime.Parse("24/01/2013"); //uses the current Thread's culture

Les deux lignes ci-dessus fonctionneraient parce que le format de la chaîne est acceptable pour la culture en-CA. Comme vous ne fournissez aucune culture à votre appel DateTime.Parse, votre culture actuelle est utilisée pour l'analyse syntaxique qui ne supporte pas le format de la date. Pour en savoir plus, consultez [DateTime.Parse][2].


Une autre méthode d'analyse syntaxique consiste à utiliser [DateTime.TryParseExact][3].

DateTime dt;
if (DateTime.TryParseExact("24/01/2013", 
                            "d/M/yyyy", 
                            CultureInfo.InvariantCulture, 
                            DateTimeStyles.None,
    out dt))
{
    //valid date
}
else
{
    //invalid date
}

Le groupe de méthodes TryParse du cadre .Net ne lève pas d'exception en cas de valeurs invalides, mais renvoie une valeur bool indiquant le succès ou l'échec de l'analyse.

**Notez que j'ai utilisé un seul d et un seul M pour le jour et le mois respectivement. Un seul d et M fonctionne pour le jour et le mois à un ou deux chiffres. Ainsi, pour le format d/M/yyyy, les valeurs valides pourraient être :

  • "24/01/2013&quot ;
  • "24/1/2013&quot ;
  • "4/12/2013&quot ; //4 décembre 2013
  • "04/12/2013&quot ;

Pour une lecture plus approfondie, vous devriez consulter : [Chaînes de format personnalisées pour la date et l'heure] [4]

[1] : http://msdn.microsoft.com/en-us/library/system.datetime.parseexact.aspx [2] : http://msdn.microsoft.com/en-us/library/system.datetime.parse(v=vs.110).aspx [3] : http://msdn.microsoft.com/en-us/library/system.datetime.tryparse(v=vs.110).aspx [4] : http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

Commentaires (3)

utiliser "DateTime.ParseExact".

string strDate = "24/01/2013";
DateTime date = DateTime.ParseExact(strDate, "dd/MM/YYYY", null)

null utilisera la culture courante, ce qui est quelque peu dangereux. Essayez de fournir une culture spécifique

DateTime date = DateTime.ParseExact(strDate, "dd/MM/YYYY", CultureInfo.InvariantCulture)
Commentaires (1)

Vous pouvez utiliser le format "dd/MM/yyyy" pour l'utiliser dans [DateTime.ParseExact][1].

Convertit la représentation de la chaîne de caractères spécifiée d'une date et d'une heure en son équivalent en format DateTime en utilisant le format spécifié et les informations de format spécifiques à la culture. spécifié et des informations sur le format spécifique à la culture. **Le format de la représentation de la chaîne doit correspondre Le format de la représentation de la chaîne doit correspondre exactement au format spécifié.

DateTime date = DateTime.ParseExact("24/01/2013", "dd/MM/yyyy", CultureInfo.InvariantCulture);

Voici un [DEMO][2].

Pour plus d'informations, consultez [Custom Date and Time Format Strings][3].

[1] : http://msdn.microsoft.com/en-us/library/w2sa9yss.aspx [2] : http://ideone.com/UjZzVB [3] : http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

Commentaires (0)