.NET Framework
Analyse de date et heure
Recherche…
ParseExact
var dateString = "2015-11-24";
var date = DateTime.ParseExact(dateString, "yyyy-MM-dd", null);
Console.WriteLine(date);
24/11/2015 12:00:00
Notez que le passage de CultureInfo.CurrentCulture
tant que troisième paramètre est identique à la transmission de null
. Ou, vous pouvez passer une culture spécifique.
Format des chaînes
La chaîne d'entrée peut être dans n'importe quel format correspondant à la chaîne de format
var date = DateTime.ParseExact("24|201511", "dd|yyyyMM", null);
Console.WriteLine(date);
24/11/2015 12:00:00
Tous les caractères qui ne sont pas des spécificateurs de format sont traités comme des littéraux
var date = DateTime.ParseExact("2015|11|24", "yyyy|MM|dd", null);
Console.WriteLine(date);
24/11/2015 12:00:00
Cas important pour les spécificateurs de format
var date = DateTime.ParseExact("2015-01-24 11:11:30", "yyyy-mm-dd hh:MM:ss", null);
Console.WriteLine(date);
24/11/2015 11:01:30
Notez que les valeurs de mois et de minute ont été analysées dans les mauvaises destinations.
Les chaînes de format à caractère unique doivent être l'un des formats standard
var date = DateTime.ParseExact("11/24/2015", "d", new CultureInfo("en-US"));
var date = DateTime.ParseExact("2015-11-24T10:15:45", "s", null);
var date = DateTime.ParseExact("2015-11-24 10:15:45Z", "u", null);
Des exceptions
ArgumentNullException
var date = DateTime.ParseExact(null, "yyyy-MM-dd", null);
var date = DateTime.ParseExact("2015-11-24", null, null);
FormatException
var date = DateTime.ParseExact("", "yyyy-MM-dd", null);
var date = DateTime.ParseExact("2015-11-24", "", null);
var date = DateTime.ParseExact("2015-0C-24", "yyyy-MM-dd", null);
var date = DateTime.ParseExact("2015-11-24", "yyyy-QQ-dd", null);
// Single-character format strings must be one of the standard formats
var date = DateTime.ParseExact("2015-11-24", "q", null);
// Format strings must match the input exactly* (see next section)
var date = DateTime.ParseExact("2015-11-24", "d", null); // Expects 11/24/2015 or 24/11/2015 for most cultures
Gestion de plusieurs formats possibles
var date = DateTime.ParseExact("2015-11-24T10:15:45",
new [] { "s", "t", "u", "yyyy-MM-dd" }, // Will succeed as long as input matches one of these
CultureInfo.CurrentCulture, DateTimeStyles.None);
Gérer les différences de culture
var dateString = "10/11/2015";
var date = DateTime.ParseExact(dateString, "d", new CultureInfo("en-US"));
Console.WriteLine("Day: {0}; Month: {1}", date.Day, date.Month);
Jour: 11; Mois: 10
date = DateTime.ParseExact(dateString, "d", new CultureInfo("en-GB"));
Console.WriteLine("Day: {0}; Month: {1}", date.Day, date.Month);
Jour: 10; Mois 11
TryParse
Cette méthode accepte une chaîne en entrée, tente de l'analyser dans un DateTime
et renvoie un résultat booléen indiquant le succès ou l'échec. Si l'appel réussit, la variable transmise en tant out
paramètre out
est renseignée avec le résultat analysé.
Si l'analyse échoue, la variable transmise en tant out
paramètre out
est définie sur la valeur par défaut, DateTime.MinValue
.
TryParse (string, out DateTime)
DateTime parsedValue;
if (DateTime.TryParse("monkey", out parsedValue))
{
Console.WriteLine("Apparently, 'monkey' is a date/time value. Who knew?");
}
Cette méthode tente d'analyser la chaîne d'entrée en fonction des paramètres régionaux du système et des formats connus tels que ISO 8601 et d'autres formats courants.
DateTime.TryParse("11/24/2015 14:28:42", out parsedValue); // true
DateTime.TryParse("2015-11-24 14:28:42", out parsedValue); // true
DateTime.TryParse("2015-11-24T14:28:42", out parsedValue); // true
DateTime.TryParse("Sat, 24 Nov 2015 14:28:42", out parsedValue); // true
Comme cette méthode n'accepte pas les informations de culture, elle utilise les paramètres régionaux du système. Cela peut conduire à des résultats inattendus.
// System set to en-US culture
bool result = DateTime.TryParse("24/11/2015", out parsedValue);
Console.WriteLine(result);
Faux
// System set to en-GB culture
bool result = DateTime.TryParse("11/24/2015", out parsedValue);
Console.WriteLine(result);
Faux
// System set to en-GB culture
bool result = DateTime.TryParse("10/11/2015", out parsedValue);
Console.WriteLine(result);
Vrai
Notez que si vous êtes aux États-Unis, vous pourriez être surpris que le résultat analysé soit le 10 novembre et non le 11 octobre.
TryParse (chaîne, IFormatProvider, DateTimeStyles, out DateTime)
if (DateTime.TryParse(" monkey ", new CultureInfo("en-GB"),
DateTimeStyles.AllowLeadingWhite | DateTimeStyles.AllowTrailingWhite, out parsedValue)
{
Console.WriteLine("Apparently, ' monkey ' is a date/time value. Who knew?");
}
Contrairement à sa méthode fraternelle, cette surcharge permet de spécifier une culture et un style spécifiques. La IFormatProvider
null
pour le paramètre IFormatProvider
utilise la culture système.
Des exceptions
Notez qu'il est possible que cette méthode lance une exception sous certaines conditions. Celles-ci concernent les paramètres introduits pour cette surcharge: IFormatProvider
et DateTimeStyles
.
-
NotSupportedException
:IFormatProvider
spécifie une culture neutre -
ArgumentException
:DateTimeStyles
n'est pas une option valide ou contient des indicateurs incompatibles tels queAssumeLocal
etAssumeUniversal
.
TryParseExact
Cette méthode se comporte comme une combinaison de TryParse
et de ParseExact
: elle permet de ParseExact
des formats personnalisés et renvoie un résultat booléen indiquant le succès ou l'échec au lieu de générer une exception si l'analyse échoue.
TryParseExact (chaîne, chaîne, IFormatProvider, DateTimeStyles, out DateTime)
Cette surcharge tente d'analyser la chaîne d'entrée en fonction d'un format spécifique. La chaîne d'entrée doit correspondre à ce format pour pouvoir être analysée.
DateTime.TryParseExact("11242015", "MMddyyyy", null, DateTimeStyles.None, out parsedValue); // true
TryParseExact (string, string [], IFormatProvider, DateTimeStyles, out DateTime)
Cette surcharge tente d'analyser la chaîne d'entrée par rapport à un tableau de formats. La chaîne d'entrée doit correspondre à au moins un format pour pouvoir être analysée.
DateTime.TryParseExact("11242015", new [] { "yyyy-MM-dd", "MMddyyyy" }, null, DateTimeStyles.None, out parsedValue); // true