Analyse des chaînes de date et d’heure dans .NETParsing Date and Time Strings in .NET

Pour analyser des chaînes pour les convertir en objets DateTime, vous devez spécifier des informations sur la façon dont les dates et heures sont représentées sous forme de texte.Parsing strings to convert them to DateTime objects requires you to specify information about how the dates and times are represented as text. L’ordre du jour, du mois et de l’année est différent selon les cultures.Different cultures use different orders for day, month, and year. Certaines représentations de l’heure utilisent une horloge de 24 heures, d’autres spécifient « AM » et « PM ».Some time representations use a 24-hour clock, others specify "AM" and "PM." Certaines applications n’ont besoin que de la date.Some applications need only the date. D’autres n’utilisent que l’heure.Others need only the time. Et d’autres encore doivent spécifier la date et l’heure.Still others need to specify both the date and the time. Les méthodes qui convertissent des chaînes en objets DateTime vous permettent de fournir des informations détaillées sur les formats souhaités et les éléments d’une date et d’une heure dont votre application a besoin.The methods that convert strings to DateTime objects enable you to provide detailed information about the formats you expect and the elements of a date and time your application needs. Il existe trois tâches subordonnées pour convertir correctement du texte en DateTime :There are three subtasks to correctly converting text into a DateTime:

  1. Vous devez spécifier le texte qui représente une date et une heure au format attendu.You must specify the expected format of the text representing a date and time.
  2. Vous pouvez spécifier la culture qui correspond au format de date et d’heure.You may specify the culture for the format of a date time.
  3. Vous pouvez spécifier la façon de définir les composants manquants d’une représentation de texte dans la date et l’heure.You may specify how missing components in the text representation are set in the date and time.

Les méthodes Parse et TryParse convertissent de nombreuses représentations communes de date et d’heure.The Parse and TryParse methods convert many common representations of a date and time. Les méthodes ParseExact et TryParseExact convertissent une représentation sous forme de chaîne conforme au modèle spécifié par une chaîne de format de date et d’heure.The ParseExact and TryParseExact methods convert a string representation that conforms to the pattern specified by a date and time format string. (Consultez les articles sur les chaînes de format de date et d’heure standard et les chaînes de format de date et d’heure personnalisées pour plus d’informations.)(See the articles on standard date and time format strings and custom date and time format strings for details.)

L’objet courant DateTimeFormatInfo fournit davantage de contrôle sur la façon d’interpréter le texte comme une date et une heure.The current DateTimeFormatInfo object provides more control over how text should be interpreted as a date and time. Les propriétés d’un DateTimeFormatInfo décrivent les séparateurs de date et d’heure et les noms de mois, de jours et de zones ainsi que le format des désignations « AM » et « PM ».Properties of a DateTimeFormatInfo describe the date and time separators, and the names of months, days, and eras, and the format for the "AM" and "PM" designations. La culture du thread en cours fournit un DateTimeFormatInfo qui représente la culture actuelle.The current thread culture provides a DateTimeFormatInfo that represents the current culture. Si vous souhaitez une culture spécifique ou des paramètres personnalisés, spécifiez le paramètre IFormatProvider d’une méthode d’analyse.If you want a specific culture or custom settings, you specify the IFormatProvider parameter of a parsing method. Pour le paramètre IFormatProvider, vous devez spécifier un objet CultureInfo qui représente une culture, ou un objet DateTimeFormatInfo.For the IFormatProvider parameter, specify a CultureInfo object, which represents a culture, or a DateTimeFormatInfo object.

Certaines informations sur le texte représentant une date ou une heure peuvent être manquantes.The text representing a date or time may be missing some information. Par exemple, pour la plupart des gens, la date « mars 12 » correspond à l’année en cours.For example, most people would assume the date "March 12" represents the current year. De même que « mars 2018 » correspond au mois de mars de l’année 2018.Similarly, "March 2018" represents the month of March in the year 2018. Le texte représentant l’heure n’inclut souvent que les heures, les minutes et une désignation AM/PM.Text representing time often does only includes hours, minutes, and an AM/PM designation. Les méthodes d’analyse gèrent ces informations manquantes à l’aide de valeurs par défaut raisonnables :Parsing methods handle this missing information by using reasonable defaults:

  • Lorsque seule l’heure est présente, la partie date utilise la date actuelle.When only the time is present, the date portion uses the current date.
  • Lorsque seule la date est présente, la partie heure correspond à minuit.When only the date is present, the time portion is midnight.
  • Lors de l’année n’est pas spécifiée dans une date, l’année en cours est utilisée.When the year isn't specified in a date, the current year is used.
  • Lorsque le jour du mois n’est pas spécifié, le premier jour du mois est utilisé.When the day of the month isn't specified, the first of the month is used.

Si la date est présente dans la chaîne, elle doit inclure le mois et le jour ou l’année.If the date is present in the string, it must include the month and one of the day or year. Si l’heure est présente, elle doit inclure l’heure et soit les minutes soit l’indicateur AM/PM.If the time is present, it must include the hour, and either the minutes or the AM/PM designator.

Vous pouvez spécifier la constante NoCurrentDateDefault pour remplacer ces valeurs par défaut.You can specify the NoCurrentDateDefault constant to override these defaults. Lorsque vous utilisez cette constante, toute propriété manquante de l’année, du mois ou du jour est définie sur la valeur 1.When you use that constant, any missing year, month, or day properties are set to the value 1. Le dernier exemple qui utilise Parse illustre ce comportement.The last example using Parse demonstrates this behavior.

Outre le composant de date et d’heure, la représentation sous forme de chaîne d’une date et d’une heure peut inclure un offset qui indique le décalage horaire par rapport au temps universel coordonné (UTC, Coordinated Universal Time).In addition to a date and a time component, the string representation of a date and time can include an offset that indicates how much the time differs from Coordinated Universal Time (UTC). Par exemple, la chaîne « 2/14/2007 5:32:00 -7:00 » définit une heure qui est sept heures plus tôt que l’heure UTC.For example, the string "2/14/2007 5:32:00 -7:00" defines a time that is seven hours earlier than UTC. Si la représentation d’une heure sous forme de chaîne n’inclut pas d’offset, l’analyse retourne un objet DateTime dont la propriété Kind a la valeur DateTimeKind.Unspecified.If an offset is omitted from the string representation of a time, parsing returns a DateTime object with its Kind property set to DateTimeKind.Unspecified. Si un offset est spécifié, l’analyse retourne un objet DateTime dont la propriété Kind a la valeur DateTimeKind.Local et dont la valeur est ajustée en fonction du fuseau horaire local de votre ordinateur.If an offset is specified, parsing returns a DateTime object with its Kind property set to DateTimeKind.Local and its value adjusted to the local time zone of your machine. Vous pouvez modifier ce comportement en utilisant une valeur DateTimeStyles avec la méthode d’analyse.You can modify this behavior by using a DateTimeStyles value with the parsing method.

Le fournisseur de format est également utilisé pour interpréter une date numérique ambiguë.The format provider is also used to interpret an ambiguous numeric date. Il n’est pas évident de savoir quels composants de la date représentée par la chaîne « 02/03/04 » correspondent au mois, au jour et à l’année.It is not clear which components of the date represented by the string "02/03/04" are the month, day, and year. Les composants sont interprétés d’après l’ordre des formats de date similaires dans le fournisseur de format.The components are interpreted according to the order of similar date formats in the format provider.

ParseParse

L’exemple suivant illustre l’utilisation de la méthode DateTime.Parse pour convertir une string en DateTime.The following example illustrates the use of the DateTime.Parse method to convert a string into a DateTime. Cet exemple fait appel à la culture associée au thread actuel.This example uses the culture associated with the current thread. Si l’objet CultureInfo associé à la culture actuelle ne peut pas analyser la chaîne d’entrée, une exception FormatException est levée.If the CultureInfo associated with the current culture cannot parse the input string, a FormatException is thrown.

Conseil

Tous les exemples c# de cet article s’exécutent dans votre navigateur.All the C# samples in this article run in your browser. Appuyez sur le bouton Exécuter pour afficher la sortie.Press the Run button to see the output. Vous pouvez également les modifier pour vous entrainer.You can also edit them to experiment yourself.

Notes

Ces exemples sont disponibles dans GitHub docs référentiel pour C# et Visual Basic.These examples are available in the GitHub docs repo for both C# and Visual Basic. Vous pouvez aussi télécharger le projet en tant que fichier zip pour C# ou Visual Basic.Or, you can download the project as a zip file for C# or Visual Basic.

string dateInput = "Jan 1, 2009";
DateTime parsedDate = DateTime.Parse(dateInput);
Console.WriteLine(parsedDate);
// Displays the following output on a system whose culture is en-US:
//       1/1/2009 12:00:00 AM
Dim MyString As String = "Jan 1, 2009"
Dim MyDateTime As DateTime = DateTime.Parse(MyString)
Console.WriteLine(MyDateTime)
' Displays the following output on a system whose culture is en-US:
'       1/1/2009 12:00:00 AM

Vous pouvez également définir explicitement la culture dont les conventions de mise en forme sont utilisées lorsque vous analysez une chaîne.You can also explicitly define the culture whose formatting conventions are used when you parse a string. Spécifiez l’un des objets standard DateTimeFormatInfo renvoyés par la propriété CultureInfo.DateTimeFormat.You specify one of the standard DateTimeFormatInfo objects returned by the CultureInfo.DateTimeFormat property. L’exemple suivant utilise un fournisseur de format pour analyser une chaîne en allemand dans DateTime.The following example uses a format provider to parse a German string into a DateTime. Il crée une CultureInfo représentant la culture de-DE.It creates a CultureInfo representing the de-DE culture. Cet objet CultureInfo garantit la réussite de l’analyse de cette chaîne particulière.That CultureInfo object ensures successful parsing of this particular string. Ceci exclut tous les paramètres contenus dans CurrentCulture de CurrentThread.This precludes whatever setting is in the CurrentCulture of the CurrentThread.

CultureInfo MyCultureInfo = new CultureInfo("de-DE");
string MyString = "12 Juni 2008";
DateTime MyDateTime = DateTime.Parse(MyString, MyCultureInfo);
Console.WriteLine(MyDateTime);
// The example displays the following output:
//       6/12/2008 12:00:00 AM
Dim MyCultureInfo As New CultureInfo("de-DE")
Dim MyString As String = "12 Juni 2008"
Dim MyDateTime As DateTime = DateTime.Parse(MyString, MyCultureInfo)
Console.WriteLine(MyDateTime)
' The example displays the following output:
'       6/12/2008 12:00:00 AM

Toutefois, bien que vous puissiez utiliser les surcharges de la méthode Parse pour spécifier des fournisseurs de format personnalisé, la méthode ne prend pas en charge l’analyse de formats non standard.However, although you can use overloads of the Parse method to specify custom format providers, the method does not support parsing non-standard formats. Pour analyser une date et une heure exprimées dans un format non standard, utilisez à la place la méthode ParseExact.To parse a date and time expressed in a non-standard format, use the ParseExact method instead.

L’exemple suivant utilise l’énumération DateTimeStyles pour spécifier que les informations de date et d’heure actuelles ne doivent pas être ajoutées à DateTime pour les champs non spécifiés.The following example uses the DateTimeStyles enumeration to specify that the current date and time information should not be added to the DateTime for unspecified fields.

CultureInfo MyCultureInfo = new CultureInfo("de-DE");
string MyString = "12 Juni 2008";
DateTime MyDateTime = DateTime.Parse(MyString, MyCultureInfo,
                                     DateTimeStyles.NoCurrentDateDefault);
Console.WriteLine(MyDateTime);
// The example displays the following output if the current culture is en-US:
//      6/12/2008 12:00:00 AM
Dim MyCultureInfo As New CultureInfo("de-DE")
Dim MyString As String = "12 Juni 2008"
Dim MyDateTime As DateTime = DateTime.Parse(MyString, MyCultureInfo,
                           DateTimeStyles.NoCurrentDateDefault)
Console.WriteLine(MyDateTime)
' The example displays the following output if the current culture is en-US:
'       6/12/2008 12:00:00 AM

ParseExactParseExact

La méthode DateTime.ParseExact convertit une chaîne en un objet DateTime si elle est conforme à l’un des modèles de chaîne spécifiés.The DateTime.ParseExact method converts a string to a DateTime object if it conforms to one of the specified string patterns. Quand une chaîne qui ne correspond pas aux formats spécifiés est transmise vers cette méthode, une FormatException est levée.When a string that is not one of the forms specified is passed to this method, a FormatException is thrown. Vous pouvez spécifier un des spécificateurs de format standard de date et d’heure ou une combinaison de spécificateurs de format personnalisé de date et d’heure.You can specify one of the standard date and time format specifiers or a combination of the custom format specifiers. En utilisant les spécificateurs de format personnalisé, vous pouvez construire une chaîne de reconnaissance personnalisée.Using the custom format specifiers, it is possible for you to construct a custom recognition string. Pour obtenir une explication des spécificateurs, consultez les rubriques relatives aux chaînes de format de date et d’heure standard et aux chaînes de format de date et d’heure personnalisées.For an explanation of the specifiers, see the topics on standard date and time format strings and custom date and time format strings.

Dans l’exemple suivant, la méthode DateTime.ParseExact reçoit un objet de chaîne à analyser, suivi par un spécificateur de format, puis un objet CultureInfo.In the following example, the DateTime.ParseExact method is passed a string object to parse, followed by a format specifier, followed by a CultureInfo object. Cette méthode ParseExact peut uniquement analyser des chaînes qui suivent le modèle de date longue dans la culture en-US.This ParseExact method can only parse strings that follow the long date pattern in the en-US culture.

CultureInfo MyCultureInfo = new CultureInfo("en-US");
string[] MyString = { " Friday, April 10, 2009", "Friday, April 10, 2009" };
foreach (string dateString in MyString)
{
    try
    {
        DateTime MyDateTime = DateTime.ParseExact(dateString, "D", MyCultureInfo);
        Console.WriteLine(MyDateTime);
    }
    catch (FormatException)
    {
        Console.WriteLine("Unable to parse '{0}'", dateString);
    }
}
// The example displays the following output:
//       Unable to parse ' Friday, April 10, 2009'
//       4/10/2009 12:00:00 AM
Dim MyCultureInfo As New CultureInfo("en-US")
Dim MyString() As String = {" Friday, April 10, 2009", "Friday, April 10, 2009"}
For Each dateString As String In MyString
    Try
        Dim MyDateTime As DateTime = DateTime.ParseExact(dateString, "D",
                                                     MyCultureInfo)
        Console.WriteLine(MyDateTime)
    Catch e As FormatException
        Console.WriteLine("Unable to parse '{0}'", dateString)
    End Try
Next
' The example displays the following output:
'       Unable to parse ' Friday, April 10, 2009'
'       4/10/2009 12:00:00 AM

Chaque surcharge des méthodes Parse et ParseExact a un paramètre IFormatProvider qui fournit des informations spécifiques à la culture sur la mise en forme de la chaîne.Each overload of the Parse and ParseExact methods also has an IFormatProvider parameter that provides culture-specific information about the formatting of the string. Cet objet IFormatProvider est un objet CultureInfo qui représente une culture standard ou un objet DateTimeFormatInfo qui est renvoyé par la propriété CultureInfo.DateTimeFormat.This IFormatProvider object is a CultureInfo object that represents a standard culture or a DateTimeFormatInfo object that is returned by the CultureInfo.DateTimeFormat property. ParseExact utilise également une chaîne supplémentaire ou un argument de tableau de chaînes qui définit un ou plusieurs formats de date et d’heure.ParseExact also uses an additional string or string array argument that defines one or more custom date and time formats.

Voir aussiSee also