web-dev-qa-db-fra.com

Conversion de chaîne formatée jj / mm / aaaa en date / heure

Je suis nouveau sur DotNet et C #. Je souhaite convertir une chaîne au format mm/dd/yyyy en objet DateTime. J'ai essayé la fonction d'analyse comme ci-dessous, mais une erreur d'exécution s'est produite.

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

Des idées sur comment puis-je le convertir en date/heure?

91
Fawad Shah

Vous devez utiliser DateTime.ParseExact au 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 il gérera à la fois les chiffres à un chiffre et les chiffres à deux chiffres jour/mois. Mais cela dépend vraiment si vous attendez des valeurs à un ou deux chiffres.


Votre format de date _day/Month/Year_ pourrait être un format de date acceptable pour certaines cultures. Par exemple, pour 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 fonctionnent car le format de la chaîne est acceptable pour la culture _en-CA_. Puisque vous ne fournissez aucune culture à votre appel _DateTime.Parse_, votre culture actuelle est utilisée pour l'analyse qui ne prend pas en charge le format de date. En savoir plus à ce sujet à DateTime.Parse .


Une autre méthode d’analyse utilise DateTime.TryParseExact

_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 .Net Framework ne génère pas d'exception pour les valeurs non valides, mais renvoie une valeur bool indiquant le succès ou l'échec de l'analyse.

Notez que j'ai utilisé seul d et M pour le jour et le mois, respectivement. Single d et M fonctionnent pour les jours et les 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 en savoir plus, consultez: Chaînes de format de date et d’heure personnalisées

234
Habib

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)
11
John Woo

Vous pouvez utiliser le format _"dd/MM/yyyy"_ pour l’utiliser dans DateTime.ParseExact .

Convertit la représentation sous forme de 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 chaîne doit correspondre exactement au format spécifié.

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

Voici un DEMO .

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

6
Soner Gönül