Cet article a fait l’objet d’une traduction automatique. Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez également afficher le texte anglais dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte traduit.
Traduction
Anglais

DateTime structure

 

Date de publication : novembre 2016

Représente un instant, généralement exprimé sous la forme d'une date et d'une heure.

Pour parcourir le code source de .NET Framework pour ce type, consultez la Reference Source.

Espace de noms:   System
Assembly:  mscorlib (dans mscorlib.dll)

[SerializableAttribute]
public struct DateTime : IComparable, IFormattable, IConvertible, 
	ISerializable, IComparable<DateTime>, IEquatable<DateTime>

NomDescription
System_CAPS_pubmethodDateTime(Int32, Int32, Int32)

Initialise une nouvelle instance de la structure DateTime avec l'année, le mois et le jour spécifiés.

System_CAPS_pubmethodDateTime(Int32, Int32, Int32, Calendar)

Initialise une nouvelle instance de la structure DateTime avec l'année, le mois et le jour spécifiés pour le calendrier spécifié.

System_CAPS_pubmethodDateTime(Int32, Int32, Int32, Int32, Int32, Int32)

Initialise une nouvelle instance de la structure DateTime avec l'année, le mois, le jour, l'heure, la minute et la seconde spécifiés.

System_CAPS_pubmethodDateTime(Int32, Int32, Int32, Int32, Int32, Int32, Calendar)

Initialise une nouvelle instance de la structure DateTime avec l'année, le mois, le jour, l'heure, la minute et la seconde spécifiés pour le calendrier spécifié.

System_CAPS_pubmethodDateTime(Int32, Int32, Int32, Int32, Int32, Int32, DateTimeKind)

Initialise une nouvelle instance de la structure DateTime avec l'année, le mois, le jour, l'heure, la minute, la seconde et l'heure UTC ou locale.

System_CAPS_pubmethodDateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32)

Initialise une nouvelle instance de la structure DateTime avec l'année, le mois, le jour, l'heure, la minute, la seconde et la milliseconde spécifiés.

System_CAPS_pubmethodDateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar)

Initialise une nouvelle instance de la structure DateTime avec l'année, le mois, le jour, l'heure, la minute, la seconde et la milliseconde spécifiés pour le calendrier spécifié.

System_CAPS_pubmethodDateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar, DateTimeKind)

Initialise une nouvelle instance de la structure DateTime avec l'année, le mois, le jour, l'heure, la minute, la seconde, la milliseconde et l'heure UTC ou locale spécifiés pour le calendrier spécifié.

System_CAPS_pubmethodDateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, DateTimeKind)

Initialise une nouvelle instance de la structure DateTime avec l'année, le mois, le jour, l'heure, la minute, la seconde, la milliseconde et l'heure UTC ou locale.

System_CAPS_pubmethodDateTime(Int64)

Initialise une nouvelle instance de la structure DateTime avec le nombre de graduations spécifié.

System_CAPS_pubmethodDateTime(Int64, DateTimeKind)

Initialise une nouvelle instance de la structure DateTime avec un nombre spécifié de graduations et une heure UTC ou locale.

NomDescription
System_CAPS_pubpropertyDate

Obtient le composant « date » de cette instance.

System_CAPS_pubpropertyDay

Obtient le jour du mois représenté par cette instance.

System_CAPS_pubpropertyDayOfWeek

Obtient le jour de semaine représenté par cette instance.

System_CAPS_pubpropertyDayOfYear

Obtient le jour de l'année représenté par cette instance.

System_CAPS_pubpropertyHour

Obtient le composant « heure » de la date représentée par cette instance.

System_CAPS_pubpropertyKind

Obtient une valeur qui indique si l'heure représentée par cette instance se base sur l'heure locale, l'heure UTC, ou aucune des deux.

System_CAPS_pubpropertyMillisecond

Obtient le composant « millisecondes » de la date représentée par cette instance.

System_CAPS_pubpropertyMinute

Obtient le composant « minutes » de la date représentée par cette instance.

System_CAPS_pubpropertyMonth

Obtient le composant « mois » de la date représentée par cette instance.

System_CAPS_pubpropertySystem_CAPS_staticNow

Obtient un objet DateTime qui a pour valeur la date et l'heure actuelles sur cet ordinateur, exprimées en heure locale.

System_CAPS_pubpropertySecond

Obtient le composant « secondes » de la date représentée par cette instance.

System_CAPS_pubpropertyTicks

Obtient le nombre de graduations représentant la date et l'heure de cette instance.

System_CAPS_pubpropertyTimeOfDay

Obtient l'heure de cette instance.

System_CAPS_pubpropertySystem_CAPS_staticToday

Obtient la date actuelle.

System_CAPS_pubpropertySystem_CAPS_staticUtcNow

Obtient un objet DateTime qui a pour valeur la date et l'heure actuelles sur cet ordinateur, exprimées en temps UTC.

System_CAPS_pubpropertyYear

Obtient le composant « année » de la date représentée par cette instance.

NomDescription
System_CAPS_pubmethodAdd(TimeSpan)

Retourne un nouveau DateTime qui ajoute la valeur du TimeSpan spécifié à la valeur de cette instance.

System_CAPS_pubmethodAddDays(Double)

Retourne un nouveau DateTime qui ajoute le nombre de jours spécifié à la valeur de cette instance.

System_CAPS_pubmethodAddHours(Double)

Retourne un nouveau DateTime qui ajoute le nombre d'heures spécifié à la valeur de cette instance.

System_CAPS_pubmethodAddMilliseconds(Double)

Retourne un nouveau DateTime qui ajoute le nombre de millisecondes spécifié à la valeur de cette instance.

System_CAPS_pubmethodAddMinutes(Double)

Retourne un nouveau DateTime qui ajoute le nombre de minutes spécifié à la valeur de cette instance.

System_CAPS_pubmethodAddMonths(Int32)

Retourne un nouveau DateTime qui ajoute le nombre de mois spécifié à la valeur de cette instance.

System_CAPS_pubmethodAddSeconds(Double)

Retourne un nouveau DateTime qui ajoute le nombre de secondes spécifié à la valeur de cette instance.

System_CAPS_pubmethodAddTicks(Int64)

Retourne un nouveau DateTime qui ajoute le nombre de graduations spécifié à la valeur de cette instance.

System_CAPS_pubmethodAddYears(Int32)

Retourne un nouveau DateTime qui ajoute le nombre d'années spécifié à la valeur de cette instance.

System_CAPS_pubmethodSystem_CAPS_staticCompare(DateTime, DateTime)

Compare deux instances de DateTime et retourne un entier qui indique si la première instance est antérieure, identique ou ultérieure à la deuxième instance.

System_CAPS_pubmethodCompareTo(DateTime)

Compare la valeur de cette instance à une valeur DateTime spécifiée et retourne un entier qui indique si cette instance est antérieure, identique ou ultérieure à la valeur DateTime spécifiée.

System_CAPS_pubmethodCompareTo(Object)

Compare la valeur de cette instance à un objet spécifié qui contient une valeur DateTime spécifiée, et retourne un entier qui indique si cette instance est antérieure, identique ou ultérieure à la valeur DateTime spécifiée.

System_CAPS_pubmethodSystem_CAPS_staticDaysInMonth(Int32, Int32)

Retourne le nombre de jours compris dans le mois et l'année spécifiés.

System_CAPS_pubmethodEquals(DateTime)

Renvoie une valeur indiquant si la valeur de cette instance est égale à la valeur de l'instance DateTime spécifiée.

System_CAPS_pubmethodSystem_CAPS_staticEquals(DateTime, DateTime)

Retourne une valeur indiquant si deux instances de DateTime représentent la même valeur de date et d'heure.

System_CAPS_pubmethodEquals(Object)

Retourne une valeur indiquant si cette instance équivaut à un objet spécifié.(Remplace ValueType.Equals(Object).)

System_CAPS_pubmethodSystem_CAPS_staticFromBinary(Int64)

Désérialise une valeur binaire 64 bits et recrée un objet DateTime sérialisé d'origine.

System_CAPS_pubmethodSystem_CAPS_staticFromFileTime(Int64)

Convertit l'heure de fichier Windows spécifiée en heure locale équivalente.

System_CAPS_pubmethodSystem_CAPS_staticFromFileTimeUtc(Int64)

Convertit l'heure de fichier Windows spécifiée en heure UTC équivalente.

System_CAPS_pubmethodSystem_CAPS_staticFromOADate(Double)

Retourne un DateTime qui équivaut à la date OLE Automation spécifiée.

System_CAPS_pubmethodGetDateTimeFormats()

Convertit la valeur de cette instance en toutes les représentations sous forme de chaîne prises en charge par les spécificateurs de format de date et d'heure standard.

System_CAPS_pubmethodGetDateTimeFormats(Char)

Convertit la valeur de cette instance en toutes les représentations sous forme de chaîne prises en charge par le spécificateur de format de date et d'heure standard spécifié.

System_CAPS_pubmethodGetDateTimeFormats(Char, IFormatProvider)

Convertit la valeur de cette instance en toutes les représentations sous forme de chaîne prises en charge par le spécificateur de format de date et d'heure standard spécifié et les données de format propres à la culture.

System_CAPS_pubmethodGetDateTimeFormats(IFormatProvider)

Convertit la valeur de cette instance en toutes les représentations sous forme de chaîne prises en charge par les spécificateurs de format de date et d'heure standard spécifié et les données de format propres à la culture spécifiées.

System_CAPS_pubmethodGetHashCode()

Retourne le code de hachage de cette instance.(Remplace ValueType.GetHashCode().)

System_CAPS_pubmethodGetType()

Obtient le Type de l'instance actuelle.(Hérité de Object.)

System_CAPS_pubmethodGetTypeCode()

Retourne le TypeCode du type valeur DateTime.

System_CAPS_pubmethodIsDaylightSavingTime()

Indique si cette instance de DateTime est dans la plage d'heures d'été pour le fuseau horaire actuel.

System_CAPS_pubmethodSystem_CAPS_staticIsLeapYear(Int32)

Retourne une indication confirmant si l'année spécifiée est une année bissextile.

System_CAPS_pubmethodSystem_CAPS_staticParse(String)

Convertit la représentation sous forme de chaîne d'une date et d'une heure en son équivalent DateTime.

System_CAPS_pubmethodSystem_CAPS_staticParse(String, IFormatProvider)

Convertit la représentation sous forme de chaîne d'une date et d'une heure en son équivalent DateTime à l'aide des informations de format propres à la culture.

System_CAPS_pubmethodSystem_CAPS_staticParse(String, IFormatProvider, DateTimeStyles)

Convertit la représentation sous forme de chaîne spécifiée d'une date et d'une heure en son équivalent DateTime à l'aide des informations et du style de format propres à la culture.

System_CAPS_pubmethodSystem_CAPS_staticParseExact(String, String, IFormatProvider)

Convertit la représentation sous forme de chaîne spécifiée d'une date et d'une heure en son équivalent DateTime à l'aide des informations de format propres à la culture et au format spécifiés. Le format de la chaîne doit correspondre exactement au format spécifié.

System_CAPS_pubmethodSystem_CAPS_staticParseExact(String, String, IFormatProvider, DateTimeStyles)

Convertit la représentation sous forme de chaîne spécifiée d'une date et d'une heure en son équivalent DateTime à l'aide des informations et du style de format propres à la culture spécifiés. Le format de la représentation sous forme de chaîne doit correspondre exactement au format spécifié, ou une exception est levée.

System_CAPS_pubmethodSystem_CAPS_staticParseExact(String, String[], IFormatProvider, DateTimeStyles)

Convertit la représentation sous forme de chaîne spécifiée d'une date et heure en son équivalent DateTime à l'aide du tableau de formats, des informations et du style de format propres à la culture spécifiés. Le format de la représentation sous forme de chaîne doit correspondre exactement à au moins l'un des formats spécifiés, ou une exception est levée.

System_CAPS_pubmethodSystem_CAPS_staticSpecifyKind(DateTime, DateTimeKind)

Crée un objet DateTime qui a le même nombre de graduations que le DateTime spécifié, mais qui est désigné comme une heure locale, une heure UTC ou aucune des deux, en fonction de ce que la valeur DateTimeKind spécifiée indique.

System_CAPS_pubmethodSubtract(DateTime)

Soustrait la date et l'heure spécifiées de cette instance.

System_CAPS_pubmethodSubtract(TimeSpan)

Soustrait la durée spécifiée de cette instance.

System_CAPS_pubmethodToBinary()

Sérialise l'objet DateTime actuel en une valeur binaire 64 bits qui pourra ensuite être utilisée pour recréer l'objet DateTime.

System_CAPS_pubmethodToFileTime()

Convertit la valeur de l'objet DateTime actuel en heure de fichier Windows.

System_CAPS_pubmethodToFileTimeUtc()

Convertit la valeur de l'objet DateTime actuel en heure de fichier Windows.

System_CAPS_pubmethodToLocalTime()

Convertit la valeur de l'objet DateTime actuel en heure locale.

System_CAPS_pubmethodToLongDateString()

Convertit la valeur de l'objet DateTime actuel en sa représentation sous forme de chaîne de date longue équivalente.

System_CAPS_pubmethodToLongTimeString()

Convertit la valeur de l'objet DateTime actuel en sa représentation sous forme de chaîne d'heure longue équivalente.

System_CAPS_pubmethodToOADate()

Convertit la valeur de cette instance en date OLE Automation équivalente.

System_CAPS_pubmethodToShortDateString()

Convertit la valeur de l'objet DateTime actuel en sa représentation sous forme de chaîne de date courte équivalente.

System_CAPS_pubmethodToShortTimeString()

Convertit la valeur de l'objet DateTime actuel en sa représentation sous forme de chaîne d'heure courte équivalente.

System_CAPS_pubmethodToString()

Convertit la valeur de l’objet DateTime actuel en sa représentation sous forme de chaîne équivalente à l’aide des conventions de formatage de la culture actuelle.(Remplace ValueType.ToString().)

System_CAPS_pubmethodToString(IFormatProvider)

Convertit la valeur de l'objet DateTime actuel en sa représentation sous forme de chaîne équivalente à l'aide des informations de format propres à la culture spécifiées.

System_CAPS_pubmethodToString(String)

Convertit la valeur de l’objet DateTime actif en sa représentation sous forme de chaîne équivalente à l’aide du format et des informations de mise en forme spécifiées de la culture courante.

System_CAPS_pubmethodToString(String, IFormatProvider)

Convertit la valeur de l'objet DateTime actuel en sa représentation sous forme de chaîne équivalente à l'aide du format et des informations de format spécifiques à la culture spécifiés.

System_CAPS_pubmethodToUniversalTime()

Convertit la valeur de l'objet DateTime actuel en Temps universel coordonné (UTC).

System_CAPS_pubmethodSystem_CAPS_staticTryParse(String, DateTime)

Convertit la représentation sous forme de chaîne spécifiée d'une date et d'une heure en son équivalent DateTime et retourne une valeur qui indique si la conversion a réussi.

System_CAPS_pubmethodSystem_CAPS_staticTryParse(String, IFormatProvider, DateTimeStyles, DateTime)

Convertit la représentation sous forme de chaîne spécifiée d'une date et d'une heure en son équivalent DateTime à l'aide des informations de format et du style de mise en forme propres à la culture spécifiés, et retourne une valeur qui indique si la conversion a réussi.

System_CAPS_pubmethodSystem_CAPS_staticTryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTime)

Convertit la représentation sous forme de chaîne spécifiée d'une date et d'une heure en son équivalent DateTime à l'aide des informations et du style de format propres à la culture spécifiés. Le format de la chaîne doit correspondre exactement au format spécifié. La méthode retourne une valeur qui indique si la conversion a réussi.

System_CAPS_pubmethodSystem_CAPS_staticTryParseExact(String, String[], IFormatProvider, DateTimeStyles, DateTime)

Convertit la représentation sous forme de chaîne spécifiée d'une date et heure en son équivalent DateTime à l'aide du tableau de formats, des informations et du style de format propres à la culture spécifiés. Le format de la chaîne doit correspondre exactement à au moins un des formats spécifiés. La méthode retourne une valeur qui indique si la conversion a réussi.

NomDescription
System_CAPS_pubfieldSystem_CAPS_staticMaxValue

Représente la plus grande valeur possible de DateTime. Ce champ est en lecture seule.

System_CAPS_pubfieldSystem_CAPS_staticMinValue

Représente la plus petite valeur possible de DateTime. Ce champ est en lecture seule.

NomDescription
System_CAPS_puboperatorSystem_CAPS_staticAddition(DateTime, TimeSpan)

Ajoute un intervalle de temps spécifié à une date et une heure spécifiées, générant une nouvelle date et heure.

System_CAPS_puboperatorSystem_CAPS_staticEquality(DateTime, DateTime)

Détermine si deux instances spécifiées de DateTime sont égales.

System_CAPS_puboperatorSystem_CAPS_staticGreaterThan(DateTime, DateTime)

Détermine si un DateTime spécifié est ultérieur à un autre DateTime spécifié.

System_CAPS_puboperatorSystem_CAPS_staticGreaterThanOrEqual(DateTime, DateTime)

Détermine si un DateTime spécifié représente une date et une heure identiques ou ultérieures à un autre DateTime spécifié.

System_CAPS_puboperatorSystem_CAPS_staticInequality(DateTime, DateTime)

Détermine si deux instances spécifiées de DateTime ne sont pas égales.

System_CAPS_puboperatorSystem_CAPS_staticLessThan(DateTime, DateTime)

Détermine si un DateTime spécifié est antérieur à un autre DateTime spécifié.

System_CAPS_puboperatorSystem_CAPS_staticLessThanOrEqual(DateTime, DateTime)

Détermine si un DateTime spécifié représente une date et une heure identiques ou antérieures à un autre DateTime spécifié.

System_CAPS_puboperatorSystem_CAPS_staticSubtraction(DateTime, DateTime)

Soustrait une date et une heure spécifiées des autres date et heure spécifiées, et retourne un intervalle de temps.

System_CAPS_puboperatorSystem_CAPS_staticSubtraction(DateTime, TimeSpan)

Soustrait un intervalle de temps spécifié d'une date et d'une heure spécifiées et retourne une nouvelle date et heure.

NomDescription
System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToBoolean(IFormatProvider)

Cette API prend en charge l’infrastructure de produit et n’est pas destinée à être utilisée directement depuis votre code. Cette conversion n'est pas prise en charge. Toute tentative d'utilisation de cette méthode lève une InvalidCastException.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToByte(IFormatProvider)

Cette API prend en charge l’infrastructure de produit et n’est pas destinée à être utilisée directement depuis votre code. Cette conversion n'est pas prise en charge. Toute tentative d'utilisation de cette méthode lève une InvalidCastException.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToChar(IFormatProvider)

Cette API prend en charge l’infrastructure de produit et n’est pas destinée à être utilisée directement depuis votre code. Cette conversion n'est pas prise en charge. Toute tentative d'utilisation de cette méthode lève une InvalidCastException.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToDateTime(IFormatProvider)

Cette API prend en charge l’infrastructure de produit et n’est pas destinée à être utilisée directement depuis votre code. Retourne l'objet DateTime actuel.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToDecimal(IFormatProvider)

Cette API prend en charge l’infrastructure de produit et n’est pas destinée à être utilisée directement depuis votre code. Cette conversion n'est pas prise en charge. Toute tentative d'utilisation de cette méthode lève une InvalidCastException.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToDouble(IFormatProvider)

Cette API prend en charge l’infrastructure de produit et n’est pas destinée à être utilisée directement depuis votre code. Cette conversion n'est pas prise en charge. Toute tentative d'utilisation de cette méthode lève une InvalidCastException.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToInt16(IFormatProvider)

Cette API prend en charge l’infrastructure de produit et n’est pas destinée à être utilisée directement depuis votre code. Cette conversion n'est pas prise en charge. Toute tentative d'utilisation de cette méthode lève une InvalidCastException.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToInt32(IFormatProvider)

Cette API prend en charge l’infrastructure de produit et n’est pas destinée à être utilisée directement depuis votre code. Cette conversion n'est pas prise en charge. Toute tentative d'utilisation de cette méthode lève une InvalidCastException.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToInt64(IFormatProvider)

Cette API prend en charge l’infrastructure de produit et n’est pas destinée à être utilisée directement depuis votre code. Cette conversion n'est pas prise en charge. Toute tentative d'utilisation de cette méthode lève une InvalidCastException.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToSByte(IFormatProvider)

Cette API prend en charge l’infrastructure de produit et n’est pas destinée à être utilisée directement depuis votre code. Cette conversion n'est pas prise en charge. Toute tentative d'utilisation de cette méthode lève une InvalidCastException.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToSingle(IFormatProvider)

Cette API prend en charge l’infrastructure de produit et n’est pas destinée à être utilisée directement depuis votre code. Cette conversion n'est pas prise en charge. Toute tentative d'utilisation de cette méthode lève une InvalidCastException.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToType(Type, IFormatProvider)

Cette API prend en charge l’infrastructure de produit et n’est pas destinée à être utilisée directement depuis votre code. Convertit l'objet DateTime actuel en un objet de type spécifié.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToUInt16(IFormatProvider)

Cette API prend en charge l’infrastructure de produit et n’est pas destinée à être utilisée directement depuis votre code. Cette conversion n'est pas prise en charge. Toute tentative d'utilisation de cette méthode lève une InvalidCastException.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToUInt32(IFormatProvider)

Cette API prend en charge l’infrastructure de produit et n’est pas destinée à être utilisée directement depuis votre code. Cette conversion n'est pas prise en charge. Toute tentative d'utilisation de cette méthode lève une InvalidCastException.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToUInt64(IFormatProvider)

Cette API prend en charge l’infrastructure de produit et n’est pas destinée à être utilisée directement depuis votre code. Cette conversion n'est pas prise en charge. Toute tentative d'utilisation de cette méthode lève une InvalidCastException.

System_CAPS_pubinterfaceSystem_CAPS_privmethodISerializable.GetObjectData(SerializationInfo, StreamingContext)

Remplit un objet SerializationInfo des données nécessaires à la sérialisation de l'objet DateTime actuel.

System_CAPS_noteRemarque

Pour afficher le code source de .NET Framework pour ce type, consultez la Reference Source. Vous pouvez parcourir le code source en ligne, télécharger la référence de consultation hors connexion et parcourir les sources (y compris les correctifs et mises à jour) pendant le débogage ; see instructions.

Le DateTime type valeur représente des dates et heures avec des valeurs comprises entre 00:00:00 (minuit), le 1er janvier 0001 Anno onze heures (ère chrétienne) à 11:59:59 PM, le 31 décembre 9999 apr. J.C. (NOTRE ÈRE) dans le calendrier grégorien.

Les valeurs de temps sont mesurés en unités de 100 nanosecondes, appelées graduations, et une date particulière est le nombre de graduations depuis 12:00 minuit, le 1er janvier 0001. (NOTRE ÈRE) dans la GregorianCalendar calendrier (à l’exclusion des graduations qui sont ajoutées par les secondes intercalaires). Par exemple, une valeur de graduations d’égale à 31241376000000000L représente la date, vendredi 01 janvier 0100 12:00:00 (minuit). A DateTime valeur est toujours exprimée dans le contexte d’une manière explicite ou d’un calendrier par défaut.

System_CAPS_noteRemarque

Si vous travaillez avec une valeur de battements que vous souhaitez convertir en un autre intervalle de temps, telles que les minutes ou secondes, vous devez utiliser le TimeSpan.TicksPerDay, TimeSpan.TicksPerHour, TimeSpan.TicksPerMinute, TimeSpan.TicksPerSecond, ou TimeSpan.TicksPerMillisecond constante pour effectuer la conversion. Par exemple, pour ajouter le nombre de secondes représenté par un nombre spécifié de graduations à la Second composant d’un DateTime valeur, vous pouvez utiliser l’expression dateValue.Second + nTicks/Timespan.TicksPerSecond.

Dans cette section :

Instanciation d’un objet DateTime
Les valeurs DateTime et leurs représentations sous forme de chaîne
Conversion de chaînes en valeurs DateTime
Considérations relatives à la version
Valeurs DateTime
Opérations DateTime
Résolution de DateTime
DateTime et. TimeSpan
Les calendriers et les valeurs DateTime
Conserver les valeurs DateTime
Considérations sur l’interopérabilité COM

Vous pouvez créer un nouveau DateTime la valeur d’une des manières suivantes :

  • En appelant une des surcharges de la DateTime constructeur qui vous permettent de spécifier des éléments spécifiques de la valeur de date et d’heure (par exemple, l’année, mois et jour ou le nombre de graduations). L’exemple suivant illustre un appel à un de le DateTime constructeurs pour créer une date avec une année spécifique, mois, jour, heure, minute et seconde.

    DateTime date1 = new DateTime(2008, 5, 1, 8, 30, 52);
    
  • En utilisant une syntaxe spécifique au compilateur pour déclarer des valeurs de date et d’heure. Par exemple, l’instruction Visual Basic suivante initialise un nouveau DateTime valeur.

    Dim date1 As Date = #5/1/2008 8:30:52AM#
    
  • En assignant le DateTime une valeur de date et d’heure retournée par une propriété ou méthode de l’objet. L’exemple suivant affecte la date actuelle et l’heure, la date du temps universel coordonné (UTC) et heure et la date actuelle à trois nouvelles DateTime variables.

    DateTime date1 = DateTime.Now;
    DateTime date2 = DateTime.UtcNow;
    DateTime date3 = DateTime.Today;
    
  • En analysant la représentation sous forme de chaîne d’une valeur de date et d’heure. Le Parse, ParseExact, TryParse, et TryParseExact toutes les méthodes de convertissent une chaîne à son équivalent valeur date et heure. L’exemple suivant utilise le Parse méthode pour analyser une chaîne et le convertir en un DateTime valeur.

    string dateString = "5/1/2008 8:30:52 AM";
    DateTime date1 = DateTime.Parse(dateString, 
                              System.Globalization.CultureInfo.InvariantCulture); 
    

    Notez que la TryParse et TryParseExact méthodes indiquent si une chaîne particulière contient une représentation valide d’un DateTime valeur en plus d’effectuer la conversion.

  • En appelant le DateTime constructeur par défaut implicite de la structure. (Pour plus d’informations sur le constructeur par défaut implicite d’un type valeur, consultez Types valeur (référence C#).) Déclare un équivalent approximatif, pour les compilateurs qui prennent en charge, un DateTime valeur sans lui assigner explicitement une date et heure à celui-ci. L’exemple suivant illustre un appel à la DateTime constructeur implicite par défaut en c# et Visual Basic, ainsi qu’un DateTime déclaration de variable sans assignation dans Visual Basic.

    DateTime dat1 = new DateTime();
    // The following method call displays 1/1/0001 12:00:00 AM.
    Console.WriteLine(dat1.ToString(System.Globalization.CultureInfo.InvariantCulture));
    // The following method call displays True.
    Console.WriteLine(dat1.Equals(DateTime.MinValue));
    

En interne, toutes les DateTime les valeurs sont représentées en tant que le nombre de graduations (nombre d’intervalles de 100 nanosecondes) qui se sont écoulées depuis 12:00:00 minuit, le 1er janvier 0001. Le texte réel DateTime la valeur est indépendante de la façon dont dans lequel cette valeur s’affiche lorsque affichées dans un élément d’interface utilisateur ou lors de l’écriture dans un fichier. L’apparence d’un DateTime valeur est le résultat d’une opération de mise en forme. Mise en forme est le processus de conversion d’une valeur en sa représentation sous forme de chaîne.

Étant donné que l’apparence des valeurs de date et d’heure dépend de facteurs tels que la culture, les normes internationales, les exigences des applications et préférences personnelles, les DateTime structure offre une grande souplesse pour la mise en forme des valeurs de date et d’heure via les surcharges de sa ToString (méthode). La valeur par défaut DateTime.ToString() méthode retourne la représentation sous forme de chaîne d’une valeur de date et d’heure à l’aide de la date courte et le modèle d’heure longue de la culture actuelle. L’exemple suivant utilise la valeur par défaut DateTime.ToString() culture de la méthode pour afficher la date et l’heure à l’aide de la date courte et le modèle d’heure longue pour les en-US, la culture en cours sur l’ordinateur sur lequel l’exemple a été exécuté.

DateTime date1 = new DateTime(2008, 3, 1, 7, 0, 0);
Console.WriteLine(date1.ToString());
// For en-US culture, displays 3/1/2008 7:00:00 AM

Le DateTime.ToString(IFormatProvider) méthode retourne la représentation sous forme de chaîne d’une valeur de date et d’heure à l’aide de la date courte et le modèle d’heure longue d’une culture spécifique. L’exemple suivant utilise la DateTime.ToString(IFormatProvider) méthode pour afficher la date et l’heure à l’aide de la date courte et le modèle d’heure longue pour la culture fr-FR.

DateTime date1 = new DateTime(2008, 3, 1, 7, 0, 0);
Console.WriteLine(date1.ToString(System.Globalization.CultureInfo.CreateSpecificCulture("fr-FR")));
// Displays 01/03/2008 07:00:00

Le DateTime.ToString(String) méthode retourne la représentation sous forme de chaîne de la date et l’heure dans un format défini par un spécificateur de format standard ou personnalisé et en utilisant les conventions de mise en forme de la culture actuelle. L’exemple suivant utilise le DateTime.ToString(String) culture de la méthode pour afficher la date complète et le modèle de temps pour les en-US, la culture en cours sur l’ordinateur sur lequel l’exemple a été exécuté.

DateTime date1 = new DateTime(2008, 3, 1, 7, 0, 0);
Console.WriteLine(date1.ToString("F"));
// Displays Saturday, March 01, 2008 7:00:00 AM

Le DateTime.ToString(String, IFormatProvider) méthode retourne la représentation sous forme de chaîne de la date et l’heure dans un format défini par un spécificateur de format spécifique et en utilisant les conventions de mise en forme d’une culture spécifique. L’exemple suivant utilise la DateTime.ToString(String, IFormatProvider) méthode pour afficher la date complète et le modèle d’heure pour la culture fr-FR.

DateTime date1 = new DateTime(2008, 3, 1, 7, 0, 0);
Console.WriteLine(date1.ToString("F", new System.Globalization.CultureInfo("fr-FR")));
// Displays samedi 1 mars 2008 07:00:00

Pour plus d’informations sur la mise en forme DateTime valeurs, consultez Chaînes de format de date et d'heure standard et Chaînes de format de date et d'heure personnalisées.

L’analyse implique la conversion de la représentation sous forme de chaîne d’une date et une heure pour un DateTime valeur. En règle générale, les chaînes de date et l’heure ont deux utilisations différentes dans les applications :

  • Elles représentent une date et une heure qui peut prendre différentes formes et qui reflète les conventions de la culture actuelle ou une culture spécifique. Par exemple, une application peut permettre à un utilisateur dont la culture actuelle est en-US pour entrer une valeur de date sous la forme « 15/12/2013 » ou « 15 décembre 2013 », et permettre à un utilisateur dont la culture actuelle est en-GB pour entrer une valeur de date sous la forme « 15/12/2013 » ou « 15 décembre 2013 ».

  • Elles représentent une date et une heure dans un format prédéfini. Par exemple, une application peut sérialiser une date sous forme de « 20130103 » indépendamment de la culture sur lequel l’application est en cours d’exécution, ou il peut exiger qu’une date soient une entrée dans le format de date courte de la culture actuelle.

Vous pouvez utiliser la Parse ou TryParse méthode pour convertir une chaîne qui peut représenter un des formats de date et l’heure courantes utilisées par une culture à un DateTime valeur. L’exemple suivant montre comment vous pouvez utiliser TryParse pour convertir des chaînes de date dans un nombre de différents formats spécifiques à la culture pour un DateTime valeur. Il remplace la culture actuelle sur anglais (Royaume-Uni) et appelle la GetDateTimeFormats() méthode permettant de générer un tableau de chaînes de date et d’heure. Il passe ensuite chaque élément dans le tableau à la TryParse (méthode). La sortie de l’exemple montre que la méthode d’analyse a été en mesure de convertir correctement chaque les propres à la culture chaînes date et heure.

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Threading;

public class Example
{
   public static void Main()
   {
      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");

      DateTime date1 = new DateTime(2013, 6, 1, 12, 32, 30);
      List<string> badFormats = new List<String>();

      Console.WriteLine("{0,-37} {1,-19}\n", "Date String", "Date");
      foreach (var dateString in date1.GetDateTimeFormats()) {
         DateTime parsedDate;
         if (DateTime.TryParse(dateString, out parsedDate))
            Console.WriteLine("{0,-37} {1,-19}", dateString, DateTime.Parse(dateString));
         else
            badFormats.Add(dateString);
      } 

      // Display strings that could not be parsed.
      if (badFormats.Count > 0) {
         Console.WriteLine("\nStrings that could not be parsed: ");
         foreach (var badFormat in badFormats)
            Console.WriteLine("   {0}", badFormat);         
      }
   }
}
// The example displays the following output:
//       Date String                           Date               
//       
//       01/06/2013                            01/06/2013 00:00:00
//       01/06/13                              01/06/2013 00:00:00
//       1/6/13                                01/06/2013 00:00:00
//       1.6.13                                01/06/2013 00:00:00
//       2013-06-01                            01/06/2013 00:00:00
//       01 June 2013                          01/06/2013 00:00:00
//       1 June 2013                           01/06/2013 00:00:00
//       01 June 2013 12:32                    01/06/2013 12:32:00
//       01 June 2013 12:32                    01/06/2013 12:32:00
//       01 June 2013 12:32 PM                 01/06/2013 12:32:00
//       01 June 2013 12:32 PM                 01/06/2013 12:32:00
//       1 June 2013 12:32                     01/06/2013 12:32:00
//       1 June 2013 12:32                     01/06/2013 12:32:00
//       1 June 2013 12:32 PM                  01/06/2013 12:32:00
//       1 June 2013 12:32 PM                  01/06/2013 12:32:00
//       01 June 2013 12:32:30                 01/06/2013 12:32:30
//       01 June 2013 12:32:30                 01/06/2013 12:32:30
//       01 June 2013 12:32:30 PM              01/06/2013 12:32:30
//       01 June 2013 12:32:30 PM              01/06/2013 12:32:30
//       1 June 2013 12:32:30                  01/06/2013 12:32:30
//       1 June 2013 12:32:30                  01/06/2013 12:32:30
//       1 June 2013 12:32:30 PM               01/06/2013 12:32:30
//       1 June 2013 12:32:30 PM               01/06/2013 12:32:30
//       01/06/2013 12:32                      01/06/2013 12:32:00
//       01/06/2013 12:32                      01/06/2013 12:32:00
//       01/06/2013 12:32 PM                   01/06/2013 12:32:00
//       01/06/2013 12:32 PM                   01/06/2013 12:32:00
//       01/06/13 12:32                        01/06/2013 12:32:00
//       01/06/13 12:32                        01/06/2013 12:32:00
//       01/06/13 12:32 PM                     01/06/2013 12:32:00
//       01/06/13 12:32 PM                     01/06/2013 12:32:00
//       1/6/13 12:32                          01/06/2013 12:32:00
//       1/6/13 12:32                          01/06/2013 12:32:00
//       1/6/13 12:32 PM                       01/06/2013 12:32:00
//       1/6/13 12:32 PM                       01/06/2013 12:32:00
//       1.6.13 12:32                          01/06/2013 12:32:00
//       1.6.13 12:32                          01/06/2013 12:32:00
//       1.6.13 12:32 PM                       01/06/2013 12:32:00
//       1.6.13 12:32 PM                       01/06/2013 12:32:00
//       2013-06-01 12:32                      01/06/2013 12:32:00
//       2013-06-01 12:32                      01/06/2013 12:32:00
//       2013-06-01 12:32 PM                   01/06/2013 12:32:00
//       2013-06-01 12:32 PM                   01/06/2013 12:32:00
//       01/06/2013 12:32:30                   01/06/2013 12:32:30
//       01/06/2013 12:32:30                   01/06/2013 12:32:30
//       01/06/2013 12:32:30 PM                01/06/2013 12:32:30
//       01/06/2013 12:32:30 PM                01/06/2013 12:32:30
//       01/06/13 12:32:30                     01/06/2013 12:32:30
//       01/06/13 12:32:30                     01/06/2013 12:32:30
//       01/06/13 12:32:30 PM                  01/06/2013 12:32:30
//       01/06/13 12:32:30 PM                  01/06/2013 12:32:30
//       1/6/13 12:32:30                       01/06/2013 12:32:30
//       1/6/13 12:32:30                       01/06/2013 12:32:30
//       1/6/13 12:32:30 PM                    01/06/2013 12:32:30
//       1/6/13 12:32:30 PM                    01/06/2013 12:32:30
//       1.6.13 12:32:30                       01/06/2013 12:32:30
//       1.6.13 12:32:30                       01/06/2013 12:32:30
//       1.6.13 12:32:30 PM                    01/06/2013 12:32:30
//       1.6.13 12:32:30 PM                    01/06/2013 12:32:30
//       2013-06-01 12:32:30                   01/06/2013 12:32:30
//       2013-06-01 12:32:30                   01/06/2013 12:32:30
//       2013-06-01 12:32:30 PM                01/06/2013 12:32:30
//       2013-06-01 12:32:30 PM                01/06/2013 12:32:30
//       01 June                               01/06/2013 00:00:00
//       01 June                               01/06/2013 00:00:00
//       2013-06-01T12:32:30.0000000           01/06/2013 12:32:30
//       2013-06-01T12:32:30.0000000           01/06/2013 12:32:30
//       Sat, 01 Jun 2013 12:32:30 GMT         01/06/2013 05:32:30
//       Sat, 01 Jun 2013 12:32:30 GMT         01/06/2013 05:32:30
//       2013-06-01T12:32:30                   01/06/2013 12:32:30
//       12:32                                 22/04/2013 12:32:00
//       12:32                                 22/04/2013 12:32:00
//       12:32 PM                              22/04/2013 12:32:00
//       12:32 PM                              22/04/2013 12:32:00
//       12:32:30                              22/04/2013 12:32:30
//       12:32:30                              22/04/2013 12:32:30
//       12:32:30 PM                           22/04/2013 12:32:30
//       12:32:30 PM                           22/04/2013 12:32:30
//       2013-06-01 12:32:30Z                  01/06/2013 05:32:30
//       01 June 2013 19:32:30                 01/06/2013 19:32:30
//       01 June 2013 19:32:30                 01/06/2013 19:32:30
//       01 June 2013 07:32:30 PM              01/06/2013 19:32:30
//       01 June 2013 7:32:30 PM               01/06/2013 19:32:30
//       1 June 2013 19:32:30                  01/06/2013 19:32:30
//       1 June 2013 19:32:30                  01/06/2013 19:32:30
//       1 June 2013 07:32:30 PM               01/06/2013 19:32:30
//       1 June 2013 7:32:30 PM                01/06/2013 19:32:30
//       June 2013                             01/06/2013 00:00:00
//       June 2013                             01/06/2013 00:00:00

Vous pouvez utiliser la TryParse et TryParseExact méthodes pour convertir une chaîne de date et d’heure qui doit correspondre à un format particulier ou formats à un DateTime valeur. Vous spécifiez le format requis ou formats en tant que paramètre aux analyse à l’aide de methodby une ou plusieurs chaînes de format de date et heure. L’exemple suivant utilise le TryParseExact(String, String[], IFormatProvider, DateTimeStyles, DateTime) méthode pour convertir des chaînes qui doivent être dans un format « AAAAMMJJ » ou « HHmmss » à DateTime valeurs.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] formats = { "yyyyMMdd", "HHmmss" };
      string[] dateStrings = { "20130816", "20131608", "  20130816   ", 
                               "115216", "521116", "  115216  " };
      DateTime parsedDate;

      foreach (var dateString in dateStrings) {
         if (DateTime.TryParseExact(dateString, formats, null, 
                                    DateTimeStyles.AllowWhiteSpaces |
                                    DateTimeStyles.AdjustToUniversal,
                                    out parsedDate))
            Console.WriteLine("{0} --> {1:g}", dateString, parsedDate);
         else
            Console.WriteLine("Cannot convert {0}", dateString);
      }
   }
}
// The example displays the following output:
//       20130816 --> 8/16/2013 12:00 AM
//       Cannot convert 20131608
//         20130816    --> 8/16/2013 12:00 AM
//       115216 --> 4/22/2013 11:52 AM
//       Cannot convert 521116
//         115216   --> 4/22/2013 11:52 AM

Le Parse et ParseExact méthodes lèvent une exception si la chaîne à convertir en un DateTime valeur ne peut pas être analysée. Le TryParse et TryParseExact méthodes retournent un Boolean valeur qui indique si la conversion a réussi ou échoué. Étant donné que l’opération d’analyse pour les chaînes de date et d’heure, en particulier si les chaînes sont entrées par les utilisateurs, ont souvent un taux élevé d’échecs, et la gestion des exceptions étant coûteuse, vous devez utiliser le TryParse ou TryParseExact méthodes dans les scénarios où performances sont importantes, ou les conversions sont soumis à un taux élevé d’échec.

Pour plus d’informations sur l’analyse des valeurs de date et d’heure, consultez Analyse des chaînes de date et d'heure dans .NET Framework.

Avant le .NET Framework version 2.0, le DateTime structure contient un champ de 64 bits composé d’un champ de 2 bits inutilisé concaténé avec privé Ticks champ, qui est un champ non signé de 62 bits qui contient le nombre de graduations représentant la date et l’heure. La valeur de la Ticks champ peut être obtenu avec la Ticks propriété.

En commençant par le .NET Framework 2.0, le DateTime structure contient un champ de 64 bits composé d’un champ Kind privé concaténé avec le champ Ticks. Le champ Kind est un champ de 2 bits qui indique si le DateTime structure représente une heure locale, un temps universel coordonné (UTC) ou l’heure dans un fuseau horaire non spécifié. Le champ Kind est utilisé lors de l’exécution de conversions d’heure entre des fuseaux horaires, mais pas pour les comparaisons de temps ou arithmétique. La valeur du champ Kind peut être obtenue avec la Kind propriété.

System_CAPS_noteRemarque

Une alternative à la DateTime structure pour travailler avec des valeurs de date et heure de fuseaux horaires en particulier est la DateTimeOffset structure. Le DateTimeOffset structure stocke des informations de date et d’heure privé DateTime champ et le nombre de minutes par lequel ces date et heure diffère du temps UTC privé Int16 champ. Il est ainsi possible pour un DateTimeOffset pour refléter l’heure dans un fuseau horaire particulier, alors qu’un DateTime valeur peut refléter clairement seulement UTC et du fuseau horaire local. Pour plus d’informations sur l’utilisation du DateTime structure ou le DateTimeOffset lorsque vous travaillez avec des valeurs de date et heure de la structure, consultez Choisir entre DateTime, DateTimeOffset, TimeSpan et TimeZoneInfo.

Valeurs d’heure dans le DateTime type sont souvent exprimés à l’aide de la norme de temps universel coordonné (UTC), qui est le nom de l’heure de Greenwich (GMT). Temps universel coordonné est le temps mesurée en longitude zéro, le point d’origine UTC. L’heure d’été n’est pas applicable au format UTC.

Heure locale est relatif à un fuseau horaire particulier. Un fuseau horaire est associé à un décalage de fuseau horaire, qui est le décalage du fuseau horaire mesuré en heures, à partir du point d’origine UTC. En outre, heure locale est éventuellement affecté par l’heure d’été, qui ajoute ou soustrait une heure de la longueur d’une journée. Par conséquent, l’heure locale est calculée en ajoutant le décalage de fuseau horaire UTC et le réglage de l’heure d’été si nécessaire. Le décalage de fuseau horaire sur le point d’origine UTC est égale à zéro.

Heure UTC est appropriée pour les calculs, les comparaisons et le stockage date et heure dans les fichiers. Heure locale est appropriée pour l’affichage dans les interfaces utilisateur des applications de bureau. Les applications prenant en charge de fuseau horaire (par exemple, de nombreuses applications Web) doivent également travailler avec un nombre d’autres fuseaux horaires.

Si le Kind propriété d’un DateTime objet est DateTimeKind.Unspecified, il n’est pas spécifié si l’heure représentée est heure locale, heure UTC ou à une heure dans un autre fuseau horaire.

Un calcul à l’aide un DateTime de la structure, tels que Add ou Subtract, ne modifiez pas la valeur de la structure. Au lieu de cela, le calcul retourne un nouveau DateTime structure dont la valeur est le résultat du calcul.

Opérations de conversion entre des fuseaux horaires (tel qu’entre l’heure UTC et l’heure locale, ou entre un fuseau horaire et l’autre) tiennent compte de l’heure d’été, mais pas les opérations arithmétiques et de comparaison.

Le DateTime structure elle-même offre un support limité pour la conversion d’un fuseau horaire à un autre. Vous pouvez utiliser la ToLocalTime méthode pour convertir l’UTC en heure locale, ou vous pouvez utiliser la ToUniversalTime méthode pour convertir à partir de l’heure locale au format UTC. Toutefois, un jeu complet de méthodes de conversion de fuseau horaire est disponible dans le TimeZoneInfo classe. À l’aide de ces méthodes, vous pouvez convertir l’heure dans l’un des fuseaux horaires du monde à l’heure dans un autre fuseau horaire.

Calculs et des comparaisons DateTime objets sont significatifs uniquement si les objets représentent les heures dans le même fuseau horaire. Vous pouvez utiliser un TimeZoneInfo objet pour représenter un DateTime fuseau horaire de valeur, même si les deux sont faiblement couplés. (C'est-à-dire, un DateTime objet n’a pas d’une propriété qui retourne un objet qui représente le fuseau horaire de cette valeur date et d’heure autre que le Kind propriété.) Pour cette raison, dans une application prenant en charge de fuseau horaire, vous devez compter sur un mécanisme externe pour déterminer le fuseau horaire dans lequel un DateTime objet a été créé. Par exemple, vous pouvez utiliser une structure qui encapsule à la fois le DateTime valeur et le TimeZoneInfo objet qui représente le DateTime fuseau horaire de valeur. Pour plus d’informations sur l’utilisation de UTC dans les calculs et les comparaisons avec DateTime valeurs, consultez Exécution d'opérations arithmétiques avec des dates et heures.

Chaque DateTime membre utilise implicitement le calendrier grégorien pour effectuer ses opérations, à l’exception des constructeurs qui spécifient un calendrier, et les méthodes avec un paramètre dérivé IFormatProvider, tel que System.Globalization.DateTimeFormatInfo, qui spécifie implicitement un calendrier.

Opérations par les membres de la DateTime type prendre en considération des éléments tels que des années bissextiles et le nombre de jours dans un mois.

Deux autres opérations courantes avec DateTime valeurs impliquent la conversion d’une valeur de date et d’heure vers ou à partir de sa représentation sous forme de chaîne. Le processus de conversion d’un DateTime valeur à sa représentation sous forme de chaîne est une opération de mise en forme ; pour plus d’informations sur la mise en forme, consultez DateTime valeurs et leurs représentations sous forme de chaîne. Le processus de conversion de la représentation sous forme de chaîne d’une date et une heure pour un DateTime valeur est une opération d’analyse ; pour plus d’informations sur l’analyse, consultez conversion de chaînes en valeurs DateTime.

System_CAPS_noteRemarque

En guise d’alternative à l’exécution de date et heure sur DateTime valeurs à mesurer le temps écoulé, vous pouvez utiliser la Stopwatch classe.

Le Ticks propriété exprime les valeurs de date et d’heure dans les unités d’un dix-millionième de seconde et le Millisecond propriété renvoie les millièmes de seconde dans une valeur de date et d’heure. Toutefois, si vous utilisez des appels répétés à la DateTime.Now propriété pour mesurer le temps écoulé et que vous êtes concerné par intervalles de petit laps de temps inférieur à 100 millisecondes, notez que les valeurs retournées par la DateTime.Now propriété dépendent de l’horloge système, qui, sur les systèmes Windows 7 et Windows 8, d’une résolution d’environ 15 millisecondes.

L’exemple suivant illustre la dépendance de la date actuelle et les valeurs d’heure de la résolution de l’horloge système. Dans l’exemple, une boucle externe se répète à 20 fois, et une boucle interne permet de retarder la boucle externe. Si la valeur du compteur de boucle externe est 10, un appel à la Thread.Sleep méthode introduit un délai de cinq millisecondes. Comme le montre la sortie de l’exemple, le nombre de millisecondes dans retourné par le DateTime.Now.Milliseconds propriété modifiée uniquement après l’appel à Thread.Sleep.

using System;
using System.Threading;

public class Example
{
   public static void Main()
   {
      String output = "";
      for (int ctr = 0; ctr <= 20; ctr++) {
         output += String.Format("{0}\n", DateTime.Now.Millisecond);
         // Introduce a delay loop.
         for (int delay = 0; delay <= 1000; delay++)
         {}

         if (ctr == 10) {
            output += "Thread.Sleep called...\n";
            Thread.Sleep(5);
         }
      }
      Console.WriteLine(output);
   }
}
// The example displays the following output:
//       111
//       111
//       111
//       111
//       111
//       111
//       111
//       111
//       111
//       111
//       111
//       Thread.Sleep called...
//       143
//       143
//       143
//       143
//       143
//       143
//       143
//       143
//       143
//       143

Le DateTime et TimeSpan types valeur diffèrent en ce qu’un DateTime représente un instant alors qu’un TimeSpan représente un intervalle de temps. Cela signifie, par exemple, que vous pouvez soustraire une instance de DateTime à partir d’une autre pour obtenir un TimeSpan objet qui représente l’intervalle de temps entre eux. Vous pouvez ajouter un nombre positif TimeSpan actuel DateTime pour obtenir un DateTime valeur qui représente une date ultérieure.

Vous pouvez ajouter ou soustraire un intervalle de temps d’un DateTime objet. Intervalles de temps peut être négatif ou positif, peut être exprimées en unités de graduations ou les secondes ou peut être exprimées comme un TimeSpan objet.

La bibliothèque de classes .NET Framework inclut un nombre de classes de calendrier, qui sont dérivées de la Calendar classe. Il s'agit des éléments suivants :

Chaque culture utilise un calendrier par défaut défini par son en lecture seule CultureInfo.Calendar propriété et prend en charge un ou plusieurs calendriers définis par son en lecture seule CultureInfo.OptionalCalendars propriété. Le calendrier actuellement utilisé par un spécifique CultureInfo objet est défini par son DateTimeFormatInfo.Calendar propriété ; il doit être un des calendriers trouvés dans le CultureInfo.OptionalCalendars tableau.

Un calendrier la culture actuelle est utilisée dans toutes les opérations de mise en forme pour cette culture. Par exemple, le calendrier par défaut de la culture persan (Iran) est le calendrier um calendrier Um-al Qura, ce qui est représenté par la UmAlQuraCalendar classe. Lorsqu’un CultureInfo objet qui représente la culture persan (Iran) est utilisé dans une date et heure de mise en forme d’opération, le calendrier um-al Qura calendrier est utilisé par défaut, et le calendrier grégorien est utilisé uniquement si la culture DateTimeFormatInfo.Calendar propriété est modifiée, comme le montre l’exemple suivant.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      var faIR = new CultureInfo("fa-IR");
      var value = new DateTime(2016, 5, 28);

      Console.WriteLine(value.ToString(faIR));

      faIR.DateTimeFormat.Calendar = new GregorianCalendar();
      Console.WriteLine(value.ToString(faIR));
   }
}
// The example displays the following output:
// 08/03/1395 12:00:00 ?.?
// 28/05/2016 12:00:00 ?.?

Calendrier actuel d’une culture est également utilisé dans toutes les opérations d’analyse pour cette culture, comme le montre l’exemple suivant.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      var faIR = new CultureInfo("fa-IR");
      var value = DateTime.Parse("08/03/1395", faIR);
      Console.WriteLine(value.ToString(faIR));

      faIR.DateTimeFormat.Calendar = new GregorianCalendar();
      Console.WriteLine(value.ToString(faIR));
   }
}
// The example displays the following output:
//       08/03/1395 12:00:00 ?.?
//       28/05/2016 12:00:00 ?.?

Vous pouvez également instancier un DateTime valeur en utilisant les éléments de date et d’heure (par exemple, le numéro de l’année, mois et jour) d’un calendrier spécifique en appelant un constructeur DateTime qui inclut un calendar paramètre et en lui passant un Calendar objet qui représente ce calendrier. L’exemple suivant effectue cela en utilisant les éléments de date et heure de la UmAlQuraCalendar calendrier.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      var faIR = new CultureInfo("fa-IR");
      var dat = new DateTime(1395, 8, 18, faIR.DateTimeFormat.Calendar);
      Console.WriteLine("Umm-al-Qura date: {0}", dat.ToString("d", faIR));
      Console.WriteLine("Gregorian date:   {0:d}", dat);
   }
}
// The example displays the following output:
//       Umm-al-Qura date: 18/08/1395
//       Gregorian date:   11/8/2016

DateTimeles constructeurs qui n’incluent pas une calendar paramètre supposent que les éléments de date et d’heure sont exprimées en unités dans le calendrier grégorien.

Tous les autres DateTime propriétés et méthodes utilisent le calendrier grégorien. Par exemple, le DateTime.Year retourne l’année dans le calendrier grégorien et le DateTime.IsLeapYear(Int32) méthode part du principe que le year paramètre est une année dans le calendrier grégorien. Chaque DateTime membre qui utilise le calendrier grégorien a un membre de la Calendar classe qui utilise un calendrier spécifique. Par exemple, le Calendar.GetYear méthode retourne l’année dans un calendrier spécifique et le Calendar.IsLeapYear méthode interprète le year paramètre en tant que numéro d’une année dans un calendrier spécifique. L’exemple suivant utilise à la fois le DateTime et les membres correspondants de la UmAlQuraCalendar classe.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      var faIR = new CultureInfo("fa-IR");
      var cal = faIR.DateTimeFormat.Calendar;
      var dat = new DateTime(1395, 8, 18, cal);
      Console.WriteLine("Using the Umm-al-Qura calendar:");
      Console.WriteLine("Date: {0}", dat.ToString("d", faIR));
      Console.WriteLine("Year: {0}", cal.GetYear(dat));
      Console.WriteLine("Leap year: {0}\n", 
                        cal.IsLeapYear(cal.GetYear(dat)));

      Console.WriteLine("Using the Gregorian calendar:");
      Console.WriteLine("Date: {0:d}", dat);
      Console.WriteLine("Year: {0}", dat.Year);
      Console.WriteLine("Leap year: {0}", DateTime.IsLeapYear(dat.Year));
   }
}
// The example displays the following output:
//       Using the Umm-al-Qura calendar:
//       Date: 18/08/1395
//       Year: 1395
//       Leap year: True
//       
//       Using the Gregorian calendar:
//       Date: 11/8/2016
//       Year: 2016
//       Leap year: True

Bien que le DateTime structure inclut DayOfWeek propriété qui retourne le jour de la semaine du calendrier grégorien, il n’inclut pas un membre qui vous permet de récupérer le numéro de semaine de l’année. Pour récupérer la semaine de l’année, appelez le calendrier Calendar.GetWeekOfYear méthode. L'exemple suivant illustre cette situation.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      var faIR = new CultureInfo("fa-IR");
      var umAlQura = faIR.DateTimeFormat.Calendar;
      var dat = new DateTime(1395, 8, 18, umAlQura);
      Console.WriteLine("Using the Umm-al-Qura calendar:");
      Console.WriteLine("Date: {0}", dat.ToString("d", faIR));
      Console.WriteLine("Day of Week: {0}", umAlQura.GetDayOfWeek(dat));
      Console.WriteLine("Week of year: {0}\n", 
                        umAlQura.GetWeekOfYear(dat, CalendarWeekRule.FirstDay, 
                                               DayOfWeek.Sunday));

      var greg = new GregorianCalendar(); 
      Console.WriteLine("Using the Gregorian calendar:");
      Console.WriteLine("Date: {0:d}", dat);
      Console.WriteLine("Day of Week: {0}", dat.DayOfWeek);
      Console.WriteLine("Week of year: {0}", 
                         greg.GetWeekOfYear(dat, CalendarWeekRule.FirstDay, 
                                            DayOfWeek.Sunday));
   }
}
// The example displays the following output:
//       Using the Umm-al-Qura calendar:
//       Date: 18/08/1395
//       Day of Week: Tuesday
//       Week of year: 34
//       
//       Using the Gregorian calendar:
//       Date: 11/8/2016
//       Day of Week: Tuesday
//       Week of year: 46

Pour plus d’informations sur les dates et calendriers, consultez Utilisation des calendriers.

Vous pouvez rendre persistante DateTime valeurs de quatre manières :

Quelle que soit la technique que vous choisissez, vous devez vous assurer que la routine qui restaure le DateTime valeurs ne perdre des données ou lever une exception. DateTimeles valeurs doivent effectuer un aller-retour. Autrement dit, la valeur d’origine et la valeur restaurée doivent être le même. Et si la version d’origine DateTime valeur représente un instant unique, elle doit identifier le moment même de temps quand elle est restaurée.

Pour restaurer correctement DateTime les valeurs qui sont conservées sous forme de chaînes, suivez ces règles :

  • Ne présumez le même spécifiques à la culture de mise en forme lors de la restauration de la chaîne comme lorsque vous rendue persistante. Pour vérifier qu’une chaîne peut être restaurée sur un système dont la culture actuelle est différente de la culture du système, il a été enregistré sur, appelez le ToStringsurcharge pour enregistrer la chaîne en utilisant les conventions de la culture dite indifférente et appelez le Parse(String, IFormatProvider, DateTimeStyles) ou TryParse(String, IFormatProvider, DateTimeStyles, DateTime) surcharge pour restaurer la chaîne en utilisant les conventions de la culture dite indifférente. N’utilisez jamais le ToString(), Parse(String), ou TryParse(String, DateTime) surcharges, qui utilisent les conventions de la culture du thread actuel.

  • Si les données représentent un instant unique de temps, vérifiez qu’il représente le moment même lorsqu’elle est restaurée, même si elle est restaurée sur un système qui utilise un autre fuseau horaire. Pour ce faire, vous convertissez la DateTime valeur en temps universel coordonné (UTC), avant de l’enregistrer. Vous pouvez également sérialiser la valeur ainsi que les informations de fuseau horaire ; Pour plus d’informations sur cette approche, consultez données DateTime de sérialisation et le fuseau horaire.

L’erreur la plus courante effectuée lors de la persistance DateTime valeurs sous forme de chaînes consiste à s’appuient sur les conventions de mise en forme de la valeur par défaut ou la culture actuelle. Problèmes si la culture actuelle est différente lors de l’enregistrement et la restauration de chaînes. L’exemple suivant illustre ces problèmes. Elle enregistre les cinq dates en utilisant les conventions de mise en forme de la culture actuelle, qui est dans ce cas l’anglais (États-Unis). Il restaure les dates en utilisant les conventions de mise en forme de la culture actuelle, qui est dans ce cas l’anglais (Royaume-Uni). Étant donné que les conventions de mise en forme de deux cultures sont différentes, deux des dates ne peuvent pas être restaurées et les dates de trois restants sont interprétés correctement. En outre, si les valeurs de date et heure d’origine représentent des instants uniques dans le temps, restauré fois sont incorrectes, car les informations de fuseau horaire sont perdues.

using System;
using System.Globalization;
using System.IO;
using System.Threading;

public class Example
{
   private const string filename = @".\BadDates.txt";

   public static void Main()
   {
      if (! File.Exists(filename))
         SaveDates();
      else
         RestoreDates();
   }

   private static void SaveDates()
   {
      DateTime[] dates = { new DateTime(2014, 6, 14, 6, 32, 0), 
                           new DateTime(2014, 7, 10, 23, 49, 0),  
                           new DateTime(2015, 1, 10, 1, 16, 0), 
                           new DateTime(2014, 12, 20, 21, 45, 0), 
                           new DateTime(2014, 6, 2, 15, 14, 0) }; 
      string output = null;

      Console.WriteLine("Current Time Zone: {0}",
                        TimeZoneInfo.Local.DisplayName);
      Console.WriteLine("The dates on an {0} system:", 
                        Thread.CurrentThread.CurrentCulture.Name);
      for (int ctr = 0; ctr < dates.Length; ctr++) { 
         Console.WriteLine(dates[ctr].ToString("f"));
         output += dates[ctr].ToString() + (ctr != dates.Length - 1 ? "|" : "");
      }
      StreamWriter sw = new StreamWriter(filename);
      sw.Write(output);
      sw.Close();
      Console.WriteLine("Saved dates...");
   }

   private static void RestoreDates()
   {
      TimeZoneInfo.ClearCachedData();
      Console.WriteLine("Current Time Zone: {0}",
                        TimeZoneInfo.Local.DisplayName);
      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");
      StreamReader sr = new StreamReader(filename);
      string[] inputValues = sr.ReadToEnd().Split( new char[] { '|' } , 
                                                  StringSplitOptions.RemoveEmptyEntries);
      sr.Close();
      Console.WriteLine("The dates on an {0} system:", 
                        Thread.CurrentThread.CurrentCulture.Name);
      foreach (var inputValue in inputValues) {
         DateTime dateValue;
         if (DateTime.TryParse(inputValue, out dateValue)) {
            Console.WriteLine("'{0}' --> {1:f}", inputValue, dateValue);
         }
         else {
            Console.WriteLine("Cannot parse '{0}'", inputValue);   
         }
      }
      Console.WriteLine("Restored dates...");   
   }
}
// When saved on an en-US system, the example displays the following output:
//       Current Time Zone: (UTC-08:00) Pacific Time (US & Canada)
//       The dates on an en-US system:
//       Saturday, June 14, 2014 6:32 AM
//       Thursday, July 10, 2014 11:49 PM
//       Saturday, January 10, 2015 1:16 AM
//       Saturday, December 20, 2014 9:45 PM
//       Monday, June 02, 2014 3:14 PM
//       Saved dates...
//
// When restored on an en-GB system, the example displays the following output:
//       Current Time Zone: (UTC) Dublin, Edinburgh, Lisbon, London
//       The dates on an en-GB system:
//       Cannot parse //6/14/2014 6:32:00 AM//
//       //7/10/2014 11:49:00 PM// --> 07 October 2014 23:49
//       //1/10/2015 1:16:00 AM// --> 01 October 2015 01:16
//       Cannot parse //12/20/2014 9:45:00 PM//
//       //6/2/2014 3:14:00 PM// --> 06 February 2014 15:14
//       Restored dates...

Pour effectuer un aller-retour DateTime valeurs avec succès, les étapes suivantes :

  1. Si les valeurs représentent des instants uniques de temps, les convertir à partir de l’heure locale au format UTC en appelant le ToUniversalTime (méthode).

  2. Convertir les dates en leurs représentations sous forme de chaîne en appelant le ToString(String, IFormatProvider) ou String.Format(IFormatProvider, String, Object[]) de surcharge. Utilisez les conventions de mise en forme de la culture dite indifférente en spécifiant CultureInfo.InvariantCulture comme le provider argument. Spécifiez que la valeur doit effectuer un aller-retour à l’aide de la « O » ou « R ».

  3. Lorsque vous appelez le Parse(String, IFormatProvider, DateTimeStyles) ou TryParse(String, IFormatProvider, DateTimeStyles, DateTime) (méthode).

Pour restaurer les données persistantes DateTime valeurs sans perte de données, procédez comme suit :

  1. Analyser les données en appelant le ParseExact ou TryParseExact de surcharge. Spécifiez CultureInfo.InvariantCulture comme le provider argument et utilisez le même format standard de chaîne utilisé pour le format argument lors de la conversion. Inclure le DateTimeStyles.RoundtripKind valeur dans le styles argument.

  2. Si le DateTime valeurs représentent des instants uniques dans le temps, l’appel de la ToLocalTime méthode pour convertir la date analysée à l’heure UTC en heure locale.

L’exemple suivant utilise la culture dite indifférente et la chaîne de format standard « O » pour vous assurer que DateTime représentent des valeurs qui sont enregistrés et restaurés au même moment dans le temps, quel que soit le système, la culture ou le fuseau horaire des systèmes source et cible.

using System;
using System.Globalization;
using System.IO;
using System.Threading;

public class Example
{
   private const string filename = @".\Dates.txt";

   public static void Main()
   {
      if (! File.Exists(filename))
         SaveDates();
      else
         RestoreDates();
   }

   private static void SaveDates()
   {
      DateTime[] dates = { new DateTime(2014, 6, 14, 6, 32, 0), 
                           new DateTime(2014, 7, 10, 23, 49, 0),  
                           new DateTime(2015, 1, 10, 1, 16, 0), 
                           new DateTime(2014, 12, 20, 21, 45, 0), 
                           new DateTime(2014, 6, 2, 15, 14, 0) }; 
      string output = null;

      Console.WriteLine("Current Time Zone: {0}",
                        TimeZoneInfo.Local.DisplayName);
      Console.WriteLine("The dates on an {0} system:", 
                        Thread.CurrentThread.CurrentCulture.Name);
      for (int ctr = 0; ctr < dates.Length; ctr++) { 
         Console.WriteLine(dates[ctr].ToString("f"));
         output += dates[ctr].ToUniversalTime().ToString("O", CultureInfo.InvariantCulture) 
                   + (ctr != dates.Length - 1 ? "|" : "");
      }
      StreamWriter sw = new StreamWriter(filename);
      sw.Write(output);
      sw.Close();
      Console.WriteLine("Saved dates...");
   }

   private static void RestoreDates()
   {
      TimeZoneInfo.ClearCachedData();
      Console.WriteLine("Current Time Zone: {0}",
                        TimeZoneInfo.Local.DisplayName);
      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");
      StreamReader sr = new StreamReader(filename);
      string[] inputValues = sr.ReadToEnd().Split( new char[] { '|' } , 
                                                  StringSplitOptions.RemoveEmptyEntries);
      sr.Close();
      Console.WriteLine("The dates on an {0} system:", 
                        Thread.CurrentThread.CurrentCulture.Name);
      foreach (var inputValue in inputValues) {
         DateTime dateValue;
         if (DateTime.TryParseExact(inputValue, "O", CultureInfo.InvariantCulture, 
                               DateTimeStyles.RoundtripKind, out dateValue)) {
            Console.WriteLine("'{0}' --> {1:f}", 
                              inputValue, dateValue.ToLocalTime());
         }
         else {
            Console.WriteLine("Cannot parse '{0}'", inputValue);   
         }
      }
      Console.WriteLine("Restored dates...");   
   }
}
// When saved on an en-US system, the example displays the following output:
//       Current Time Zone: (UTC-08:00) Pacific Time (US & Canada)
//       The dates on an en-US system:
//       Saturday, June 14, 2014 6:32 AM
//       Thursday, July 10, 2014 11:49 PM
//       Saturday, January 10, 2015 1:16 AM
//       Saturday, December 20, 2014 9:45 PM
//       Monday, June 02, 2014 3:14 PM
//       Saved dates...
//
// When restored on an en-GB system, the example displays the following output:
//       Current Time Zone: (UTC) Dublin, Edinburgh, Lisbon, London
//       The dates on an en-GB system:
//       '2014-06-14T13:32:00.0000000Z' --> 14 June 2014 14:32
//       '2014-07-11T06:49:00.0000000Z' --> 11 July 2014 07:49
//       '2015-01-10T09:16:00.0000000Z' --> 10 January 2015 09:16
//       '2014-12-21T05:45:00.0000000Z' --> 21 December 2014 05:45
//       '2014-06-02T22:14:00.0000000Z' --> 02 June 2014 23:14
//       Restored dates...

Au lieu de la persistance d’un DateTime valeur sous forme de chaîne, vous pouvez rendre persistante en tant qu’un Int64 valeur qui représente un nombre de graduations. Dans ce cas, il est inutile à prendre en compte la culture des systèmes la DateTime valeurs sont conservées et restaurées sur.

Pour conserver un DateTime valeur sous forme d’entier :

  • Si le DateTime les valeurs représentent des instants uniques dans le temps, les convertir au format UTC en appelant le ToUniversalTime (méthode).

  • Extraire le nombre de graduations représenté par le DateTime valeur à partir de son Ticks propriété.

Pour restaurer un DateTime valeur qui a été rendue persistante sous forme d’entier :

  1. Instancier un nouvel DateTime en passant le Int64 valeur le DateTime(Int64) constructeur.

  2. Si le DateTime valeur représente un instant unique, convertissez-le à l’heure UTC à l’heure locale en appelant le ToLocalTime (méthode).

L’exemple suivant rend persistant un tableau de DateTime valeurs en tant qu’entiers sur un système aux États-Unis. Pacifique (États-Unis). Elle sera restaurée sur un système dans la zone UTC. Le fichier qui contient des entiers inclut un Int32 valeur qui indique le nombre total de Int64 les valeurs qui suivent immédiatement.

using System;
using System.Globalization;
using System.IO;
using System.Threading;

class Example
{
   private const string filename = @".\IntDates.bin";

   public static void Main()
   {
      if (! File.Exists(filename))
         SaveDates();
      else
         RestoreDates();
   }

   private static void SaveDates()
   {
      DateTime[] dates = { new DateTime(2014, 6, 14, 6, 32, 0), 
                           new DateTime(2014, 7, 10, 23, 49, 0),  
                           new DateTime(2015, 1, 10, 1, 16, 0), 
                           new DateTime(2014, 12, 20, 21, 45, 0), 
                           new DateTime(2014, 6, 2, 15, 14, 0) }; 

      Console.WriteLine("Current Time Zone: {0}",
                        TimeZoneInfo.Local.DisplayName);
      Console.WriteLine("The dates on an {0} system:", 
                        Thread.CurrentThread.CurrentCulture.Name);
      long[] ticks = new long[dates.Length];
      for (int ctr = 0; ctr < dates.Length; ctr++) { 
         Console.WriteLine(dates[ctr].ToString("f"));
         ticks[ctr] = dates[ctr].ToUniversalTime().Ticks; 
      }
      FileStream fs = new FileStream(filename, FileMode.Create);
      BinaryWriter bw = new BinaryWriter(fs);
      bw.Write(ticks.Length);
      foreach (var tick in ticks)
         bw.Write(tick);

      bw.Close();
      Console.WriteLine("Saved dates...");
   }

   private static void RestoreDates()
   {
      TimeZoneInfo.ClearCachedData();
      Console.WriteLine("Current Time Zone: {0}",
                        TimeZoneInfo.Local.DisplayName);
      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");
      FileStream fs = new FileStream(filename, FileMode.Open);
      BinaryReader br = new BinaryReader(fs);
      int items;
      DateTime[] dates;

      try { 
         items = br.ReadInt32();
         dates = new DateTime[items];

         for (int ctr = 0; ctr < items; ctr++) {
            long ticks = br.ReadInt64();
            dates[ctr] = new DateTime(ticks).ToLocalTime();
         }
      }   
      catch (EndOfStreamException) {
         Console.WriteLine("File corruption detected. Unable to restore data...");
         return;
      }   
      catch (IOException) {
         Console.WriteLine("Unspecified I/O error. Unable to restore data...");
         return;
      }
      // Thrown during array initialization.
      catch (OutOfMemoryException) {
         Console.WriteLine("File corruption detected. Unable to restore data...");
         return;
      }
      finally {      
         br.Close();
      }   

      Console.WriteLine("The dates on an {0} system:", 
                        Thread.CurrentThread.CurrentCulture.Name);
      foreach (var value in dates)
         Console.WriteLine(value.ToString("f"));

      Console.WriteLine("Restored dates...");   
   }
}
// When saved on an en-US system, the example displays the following output:
//       Current Time Zone: (UTC-08:00) Pacific Time (US & Canada)
//       The dates on an en-US system:
//       Saturday, June 14, 2014 6:32 AM
//       Thursday, July 10, 2014 11:49 PM
//       Saturday, January 10, 2015 1:16 AM
//       Saturday, December 20, 2014 9:45 PM
//       Monday, June 02, 2014 3:14 PM
//       Saved dates...
//
// When restored on an en-GB system, the example displays the following output:
//       Current Time Zone: (UTC) Dublin, Edinburgh, Lisbon, London
//       The dates on an en-GB system:
//       14 June 2014 14:32
//       11 July 2014 07:49
//       10 January 2015 09:16
//       21 December 2014 05:45
//       02 June 2014 23:14
//       Restored dates...

Au lieu de l’enregistrement DateTime valeurs en tant que chaînes ou des entiers, ce qui vous devez ensuite convertir pour revenir DateTime valeurs, vous pouvez rendre persistante DateTime valeurs via la sérialisation vers un flux de données ou fichier, puis restaurez les pendant la désérialisation. Dans ce cas, DateTimeles données sont sérialisées dans un format de l’objet spécifié et les objets sont restaurés quand ils sont désérialisés. Un module de formatage ou d’un sérialiseur, tel que XmlSerializer ou BinaryFormatter, gère le processus de sérialisation et la désérialisation. Pour plus d’informations sur la sérialisation et les types de sérialisation pris en charge par le .NET Framework, consultez Sérialisation.

L’exemple suivant utilise le XmlSerializer classe pour sérialiser et désérialiser DateTime valeurs qui représentent tous les leap an jours au vingt et unième siècle. Le résultat représente le résultat si l’exemple est exécuté sur un système dont la culture actuelle est anglais (Royaume-Uni). Étant donné que nous avons désérialisé le DateTime objet proprement dit, le code ne doit pas nécessairement gérer les différences culturelles dans des formats de date et d’heure.

using System;
using System.Collections.Generic;
using System.IO;
using System.Threading;
using System.Xml.Serialization;

class Example
{
   private const string filename = @".\LeapYears.xml";

   public static void Main()
   {
      // Serialize the data.
      List<DateTime> leapYears = new List<DateTime>();
      for (int year = 2000; year <= 2100; year += 4) {
         if (DateTime.IsLeapYear(year)) 
            leapYears.Add(new DateTime(year, 2, 29));
      }
      DateTime[] dateArray = leapYears.ToArray();

      XmlSerializer serializer = new XmlSerializer(dateArray.GetType());
      TextWriter sw = new StreamWriter(filename);

      try {
         serializer.Serialize(sw, dateArray);
      }
      catch (InvalidOperationException e) {
         Console.WriteLine(e.InnerException.Message);         
      }
      finally {
         if (sw != null) sw.Close();
      }   

      // Deserialize the data.
      DateTime[] deserializedDates;
      using (FileStream fs = new FileStream(filename, FileMode.Open)) {
         deserializedDates = (DateTime[]) serializer.Deserialize(fs);
      } 

      // Display the dates.
      Console.WriteLine("Leap year days from 2000-2100 on an {0} system:",
                        Thread.CurrentThread.CurrentCulture.Name);
      int nItems = 0;
      foreach (var dat in deserializedDates) {
         Console.Write("   {0:d}     ", dat);
         nItems++;
         if (nItems % 5 == 0) 
               Console.WriteLine(); 
      }
   }
}
// The example displays the following output:
//    Leap year days from 2000-2100 on an en-GB system:
//       29/02/2000       29/02/2004       29/02/2008       29/02/2012       29/02/2016
//       29/02/2020       29/02/2024       29/02/2028       29/02/2032       29/02/2036
//       29/02/2040       29/02/2044       29/02/2048       29/02/2052       29/02/2056
//       29/02/2060       29/02/2064       29/02/2068       29/02/2072       29/02/2076
//       29/02/2080       29/02/2084       29/02/2088       29/02/2092       29/02/2096

L’exemple précédent n’inclut pas les informations de temps. Toutefois, si un DateTime valeur représente un moment donné et est exprimée en heure locale, vous devez le convertir à partir de l’heure locale en temps UTC avant qu’elle en appelant le ToUniversalTime (méthode). Une fois que vous le désérialiser, vous devez le convertir à l’heure UTC en heure locale en appelant le ToLocalTime (méthode). L’exemple suivant utilise le BinaryFormatter classe à sérialiserDateTime données sur un système aux États-Unis. Zone Pacifique et à désérialiser sur un système dans le fuseau UTC.

using System;
using System.IO;
using System.Globalization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Threading;

class Example
{
   private const string filename = @".\Dates.bin";

   public static void Main()
   {
      if (! File.Exists(filename))
         SaveDates();
      else
         RestoreDates();
   }

   private static void SaveDates()
   {
      DateTime[] dates = { new DateTime(2014, 6, 14, 6, 32, 0), 
                           new DateTime(2014, 7, 10, 23, 49, 0),  
                           new DateTime(2015, 1, 10, 1, 16, 0), 
                           new DateTime(2014, 12, 20, 21, 45, 0), 
                           new DateTime(2014, 6, 2, 15, 14, 0) }; 
      FileStream fs = new FileStream(filename, FileMode.Create);
      BinaryFormatter bin = new BinaryFormatter();

      Console.WriteLine("Current Time Zone: {0}",
                        TimeZoneInfo.Local.DisplayName);
      Console.WriteLine("The dates on an {0} system:", 
                        Thread.CurrentThread.CurrentCulture.Name);
      for (int ctr = 0; ctr < dates.Length; ctr++) { 
         Console.WriteLine(dates[ctr].ToString("f"));
         dates[ctr] = dates[ctr].ToUniversalTime();
      }
      bin.Serialize(fs, dates);
      fs.Close();
      Console.WriteLine("Saved dates...");
   }

   private static void RestoreDates()
   {
      TimeZoneInfo.ClearCachedData();
      Console.WriteLine("Current Time Zone: {0}",
                        TimeZoneInfo.Local.DisplayName);
      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");

      FileStream fs = new FileStream(filename, FileMode.Open);
      BinaryFormatter bin = new BinaryFormatter();
      DateTime[] dates = (DateTime[]) bin.Deserialize(fs);
      fs.Close();

      Console.WriteLine("The dates on an {0} system:", 
                        Thread.CurrentThread.CurrentCulture.Name);
      foreach (var value in dates)
         Console.WriteLine(value.ToLocalTime().ToString("f"));

      Console.WriteLine("Restored dates...");   
   }
}
// When saved on an en-US system, the example displays the following output:
//       Current Time Zone: (UTC-08:00) Pacific Time (US & Canada)
//       The dates on an en-US system:
//       Saturday, June 14, 2014 6:32 AM
//       Thursday, July 10, 2014 11:49 PM
//       Saturday, January 10, 2015 1:16 AM
//       Saturday, December 20, 2014 9:45 PM
//       Monday, June 02, 2014 3:14 PM
//       Saved dates...
//
// When restored on an en-GB system, the example displays the following output:
//       Current Time Zone: (UTC) Dublin, Edinburgh, Lisbon, London
//       The dates on an en-GB system:
//       14 June 2014 14:32
//       11 July 2014 07:49
//       10 January 2015 09:16
//       21 December 2014 05:45
//       02 June 2014 23:14
//       Restored dates...

Les exemples précédents ont tous supposé que DateTime valeurs sont exprimées en heures locales et convertir les valeurs comprises entre l’heure UTC et l’heure locale pour qu’elles reflètent le moment même sur les systèmes source et cible. DateTimevaleurs peuvent également refléter moments dans le temps dans un fuseau horaire autre que local et l’heure UTC. Dans ce cas, étant donné que le DateTime structure ne prend pas en charge de fuseau horaire, vous devez sérialiser les deux le DateTimevaleur et le TimeZoneInfo objet qui représente son fuseau horaire. Pour ce faire, créez un type dont les champs comprennent le DateTime valeur et son fuseau horaire. L’exemple suivant définit un DateWithTimeZone structure qui illustre comment procéder.

using System;

namespace DateTimeExtensions
{
   [Serializable] public struct DateWithTimeZone
   {
      private TimeZoneInfo tz;
      private DateTime dt;

      public DateWithTimeZone(DateTime dateValue, TimeZoneInfo timeZone)
      {
         dt = dateValue;
         if (timeZone == null)
            tz = TimeZoneInfo.Local;
         else
            tz = timeZone;
      }   

      public TimeZoneInfo TimeZone 
      { get { return (tz); }
        set { tz = value; } }

      public DateTime DateTime 
      { get { return (dt); }
        set { dt = value; } }
   }
}
System_CAPS_importantImportant

Le DateWithTimeZone structure est utilisée dans les deux exemples, sérialiser et désérialiser un tableau de DateWithTimeZone objets. Pour exécuter les exemples, tout d’abord créer une bibliothèque de classes qui contient le DateWithTimeZone de la structure, puis ajoutez une référence à celle-ci lors de la compilation de chaque exemple.

À l’aide de la DateWithTimeZone structure, vous pouvez puis conserve la date et l’heure, ainsi que des informations de fuseau horaire. L’exemple suivant utilise le BinaryFormatter classe pour sérialiser un tableau de DateWithTimeZoneobjets.

using System;
using DateTimeExtensions;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;

public class Example
{
   public static void Main()
   {
      DateWithTimeZone[] dates= { new DateWithTimeZone(new DateTime(2014, 8, 9, 19, 30, 0),  
                                      TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")),
                                  new DateWithTimeZone(new DateTime(2014, 8, 15, 19, 0, 0), 
                                      TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time")),  
                                  new DateWithTimeZone(new DateTime(2014, 8, 22, 19, 30, 0),  
                                      TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")),  
                                  new DateWithTimeZone(new DateTime(2014, 8, 28, 19, 0, 0), 
                                      TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")) };
      FileStream fs = new FileStream(@".\Schedule.bin", FileMode.Create);
      BinaryFormatter formatter = new BinaryFormatter();
      try {
         formatter.Serialize(fs, dates);
         // Display dates.
         foreach (var date in dates) {
            TimeZoneInfo tz = date.TimeZone;
            Console.WriteLine("{0} {1}", date.DateTime, 
                              tz.IsDaylightSavingTime(date.DateTime) ? 
                              tz.DaylightName : tz.StandardName);      
         }
      }
      catch (SerializationException e) {
         Console.WriteLine("Serialization failed. Reason: {0}", e.Message);
      }   
      finally {
         if (fs != null) fs.Close();
      }
   }
}
// The example displays the following output:
//       8/9/2014 7:30:00 PM Eastern Daylight Time
//       8/15/2014 7:00:00 PM Pacific Daylight Time
//       8/22/2014 7:30:00 PM Eastern Daylight Time
//       8/28/2014 7:00:00 PM Eastern Daylight Time

L’exemple suivant appelle ensuite la BinaryFormatter.Deserialize méthode à désérialiser.

using System;
using DateTimeExtensions;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;

public class Example
{
   private const string filename = @".\Schedule.bin";

   public static void Main()
   {
      FileStream fs;
      if (File.Exists(filename))
         fs = new FileStream(filename, FileMode.Open);
      else {
         Console.WriteLine("Unable to find file to deserialize.");
         return;
      }

      BinaryFormatter formatter = new BinaryFormatter();
      DateWithTimeZone[] dates;
      try {
         dates = (DateWithTimeZone[]) formatter.Deserialize(fs);
         // Display dates.
         foreach (var date in dates) {
            TimeZoneInfo tz = date.TimeZone;
            Console.WriteLine("{0} {1}", date.DateTime, 
                              tz.IsDaylightSavingTime(date.DateTime) ? 
                              tz.DaylightName : tz.StandardName);      
         }
      }
      catch (SerializationException e) {
         Console.WriteLine("Deserialization failed. Reason: {0}", e.Message);
      }   
      finally {
         if (fs != null) fs.Close();
      }
   }
}
// The example displays the following output:
//       8/9/2014 7:30:00 PM Eastern Daylight Time
//       8/15/2014 7:00:00 PM Pacific Daylight Time
//       8/22/2014 7:30:00 PM Eastern Daylight Time
//       8/28/2014 7:00:00 PM Eastern Daylight Time

A DateTime valeur qui est transféré à une application COM, puis transférée à une application managée, est dite d’aller-retour. Toutefois, un DateTime n’est pas le cas de valeur qui spécifie uniquement une heure aller-retour comme prévu.

Si vous effectuer un aller-retour uniquement une heure, par exemple 3 heures, la date et l’heure est le 30 décembre 1899 (notre ère) à 3 h 00, à la place, le 1er janvier 0001 (notre ère) à 3 h 00 Cela se produit parce que le .NET Framework et COM supposent une date par défaut lorsque seule une heure est spécifiée. Toutefois, le système COM suppose une date de base du 30 décembre 1899 (notre ère) alors que le .NET Framework suppose une date de base, le 1er janvier 0001 (notre ère)

Lorsque seule une heure est passée du .NET Framework à COM, un traitement spécial est effectué qui convertit l’heure au format utilisé par COM. Quand uniquement une heure est passée de COM au .NET Framework, aucun traitement spécial n’est effectuée, car cela serait endommager les dates et heures ou avant le 30 décembre 1899 légitimes. Cela signifie également que si une date démarre son aller-retour à partir de COM, le .NET Framework et COM conservent la date.

Le comportement du .NET Framework et de COM signifie que si votre application réalise un aller-retour un DateTime qui spécifie uniquement une heure, votre application doit veiller à modifier ou à ignorer la date erronée de la dernière DateTime objet.

L’exemple suivant montre comment comparer à peu près équivalent DateTime valeurs, une légère différence lorsque vous les déclarez égale.

using System;

class DateTimeTester 
{
   static bool RoughlyEquals(DateTime time, DateTime timeWithWindow, int windowInSeconds, int frequencyInSeconds)
   {
      long delta = (long)((TimeSpan)(timeWithWindow - time)).TotalSeconds 
                                                     % frequencyInSeconds;

      delta = delta > windowInSeconds ? frequencyInSeconds - delta : delta;

      return Math.Abs(delta) < windowInSeconds;
	}

	public static void Main() 
	{
      int window = 10;
      int freq = 60 * 60 * 2; // 2 hours;

      DateTime d1 = DateTime.Now;

      DateTime d2 = d1.AddSeconds(2 * window);
      DateTime d3 = d1.AddSeconds(-2 * window);
      DateTime d4 = d1.AddSeconds(window / 2);
      DateTime d5 = d1.AddSeconds(-window / 2);

      DateTime d6 = (d1.AddHours(2)).AddSeconds(2 * window);
      DateTime d7 = (d1.AddHours(2)).AddSeconds(-2 * window);
      DateTime d8 = (d1.AddHours(2)).AddSeconds(window / 2);
      DateTime d9 = (d1.AddHours(2)).AddSeconds(-window / 2);

      Console.WriteLine("d1 ({0}) ~= d1 ({1}): {2}",
                        d1, d1, RoughlyEquals(d1, d1, window, freq));
      Console.WriteLine("d1 ({0}) ~= d2 ({1}): {2}", 
                        d1, d2, RoughlyEquals(d1, d2, window, freq));
      Console.WriteLine("d1 ({0}) ~= d3 ({1}): {2}", 
                        d1, d3, RoughlyEquals(d1, d3, window, freq));
      Console.WriteLine("d1 ({0}) ~= d4 ({1}): {2}", 
                        d1, d4, RoughlyEquals(d1, d4, window, freq));
      Console.WriteLine("d1 ({0}) ~= d5 ({1}): {2}", 
                        d1, d5, RoughlyEquals(d1, d5, window, freq));

      Console.WriteLine("d1 ({0}) ~= d6 ({1}): {2}", 
                        d1, d6, RoughlyEquals(d1, d6, window, freq));
      Console.WriteLine("d1 ({0}) ~= d7 ({1}): {2}", 
                        d1, d7, RoughlyEquals(d1, d7, window, freq));
      Console.WriteLine("d1 ({0}) ~= d8 ({1}): {2}", 
                        d1, d8, RoughlyEquals(d1, d8, window, freq));
      Console.WriteLine("d1 ({0}) ~= d9 ({1}): {2}", 
                        d1, d9, RoughlyEquals(d1, d9, window, freq));
	}
}
// The example displays output similar to the following:
//    d1 (1/28/2010 9:01:26 PM) ~= d1 (1/28/2010 9:01:26 PM): True
//    d1 (1/28/2010 9:01:26 PM) ~= d2 (1/28/2010 9:01:46 PM): False
//    d1 (1/28/2010 9:01:26 PM) ~= d3 (1/28/2010 9:01:06 PM): False
//    d1 (1/28/2010 9:01:26 PM) ~= d4 (1/28/2010 9:01:31 PM): True
//    d1 (1/28/2010 9:01:26 PM) ~= d5 (1/28/2010 9:01:21 PM): True
//    d1 (1/28/2010 9:01:26 PM) ~= d6 (1/28/2010 11:01:46 PM): False
//    d1 (1/28/2010 9:01:26 PM) ~= d7 (1/28/2010 11:01:06 PM): False
//    d1 (1/28/2010 9:01:26 PM) ~= d8 (1/28/2010 11:01:31 PM): True
//    d1 (1/28/2010 9:01:26 PM) ~= d9 (1/28/2010 11:01:21 PM): True

Plateforme Windows universelle
Disponible depuis 8
.NET Framework
Disponible depuis 1.1
Bibliothèque de classes portable
Pris en charge dans : plateformes .NET portables
Silverlight
Disponible depuis 2.0
Silverlight pour Windows Phone
Disponible depuis 7.0
Windows Phone
Disponible depuis 8.1

Tous les membres de ce type sont thread-safe. Les membres qui semblent modifier l’état de l’instance retournent en fait une nouvelle instance initialisée avec la nouvelle valeur. Comme avec tout autre type, la lecture et en écriture à une variable partagée qui contient une instance de ce type doivent être protégées par un verrou pour garantir la sécurité des threads.

System_CAPS_cautionAttention

Affectation d’une instance de ce type n’est pas thread-safe sur toutes les plateformes matérielles car la représentation binaire de cette instance peut être trop grande pour attribuer en une seule opération atomique.

Retour au début
Afficher: