115 votes

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

Je suis novice en matière de DotNet et de C#. Je veux convertir une chaîne de caractères en mm/dd/yyyy format pour DateTime objet. 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");

Avez-vous une idée de la façon dont je peux le convertir en date ?

290voto

Habib Points 93087

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

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

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


Votre format de date day/Month/Year peut ê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 de caractères est acceptable pour en-CA la culture. Puisque vous ne fournissez aucune culture à votre DateTime.Parse votre culture actuelle est utilisée pour l'analyse syntaxique et ne prend pas en charge le format de date. Pour en savoir plus, consultez DateTime.Parse .


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

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

El TryParse dans le cadre du .Net ne lève pas d'exception en cas de valeurs non valides, mais renvoie un message de type bool valeur indiquant le succès ou l'échec de l'analyse syntaxique.

Avis que j'ai utilisé seul d y M pour le jour et le mois respectivement. Simple d y 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"
  • "24/1/2013"
  • "4/12/2013" //4 décembre 2013
  • "04/12/2013"

Pour une lecture plus approfondie, vous devriez voir : Chaînes de format de date et d'heure personnalisées

15voto

John Woo Points 132738

Utiliser DateTime.ParseExact

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

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

DateTime date = DateTime.ParseExact(strDate, "dd/MM/yyyy", CultureInfo.InvariantCulture)

7voto

Soner Gönül Points 35739

Vous pouvez utiliser "dd/MM/yyyy" pour l'utiliser dans DateTime.ParseExact .

Convertit la représentation de la chaîne spécifiée d'une date et d'une heure en son équivalent DateTime, en utilisant le format spécifié et les informations de format spécifiques à la culture. Le format de la représentation de la chaîne doit correspondre à le format spécifié.

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

Voici un DEMO .

Pour plus d'informations, consultez le site Custom Date and Time Format Strings

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X