VARIANT DATE en chaîne datetime

Ce calculateur en ligne convertie une valeur de DATE VARIANT (double) en chaîne datetime.

Cette page existe grâce aux efforts des personnes suivantes :

Timur

Timur

Gaulthier Marrel

Créé: 2021-06-07 02:28:20, Dernière mise à jour: 2021-06-08 01:21:41

Il y a très longtemps, lors du développement de logiciel...
Il y avait un type VARIANT qui pouvait contenir de nombreux types de données différents (vartypes), voir wikipédia. Et l'un des types de variable était VT_DATE, soit Variant date, ou DATE (double), ou variant date OLE. C'était une valeur DateTime représentée comme un double nombre réel flottant de 8 octets. D'ailleurs, tout ce qui concerne les données de type Variant est encore d'actualité, sauf que la programmation Windows ou COM/ActiveX/OLE hardcore, ne regarde plus l'intégration de nos jours.

Parfois, lorsque vous voyez quelque chose comme 42842,370277778, il es probable que ce soit un variant date. Et voici un calculateur simple qui prend une valeur double, l'interprète comme un variant date et dote l'heure et la date encodées dans cette valeur double. Pour les personnes curieuses au sujet du format et de l'histoire du variant date, ils peuvent lire cela en-dessous du calculateur.

PLANETCALC, VARIANT DATE en chaîne datetime

VARIANT DATE en chaîne datetime

Datetime
 

Concernant le format variant date.

Selon la documentation, les jours sont représentés par une augmentation d'un nombre entier commençant le 30 décembre 1899 à minuit, comme temps zéro. Les valeurs des heures sont exprimées comme la valeur absolue de la partie fractionnaire du nombre.

Oui, il y a un piège. Bien que les valeurs des jours deviennent négatives avant minuit le 30 décembre 1899, les valeurs de l'heure de la journée de le sont pas. Par exemple 6 heures est toujours représenté par la valeur fractionnaire 0,25 peu importe que l'entier représentant le jour soit positif (après le 30 décembre 1899) ou négatif (avant le 30 décembre 1899).

De ce fait, la valeur de date entre -1,0 et 0,0 représente les mêmes dates logiques que leurs homologues positifs. Ainsi, -0,5 et 0,5 sont les mêmes 30/12/1899 12:00.

Vous pouvez également vous demander pourquoi le variant date a un point zéro si étrange, le 30 décembre 1899, contrairement au 1er janvier 1900 (point zéro du serveur SQL) ou au 1er janvier 1970 (point zéro de Unix/Javascript). Comme écrit par Eric Lippert, "En fait, il s’avère que c’est pour contourner un bug dans Lotus 1-2-3 ! Les détails sont perdus dans la brume du temps, mais apparemment, Lotus 1-2-3 a utilisé ce format de date, mais leurs développeurs ont oublié que 1900 n’était pas une année bissextile. Microsoft a corrigé ce bug en déplaçant le premier jour d'un jour en arrière." Ceci et d'autres bizarreries de VT_DATE sont expliquées dans cet article, et c'est une lecture fascinante pour un ancien développeur comme moi. Profitez-en.

URL copiée dans le presse-papiers
PLANETCALC, VARIANT DATE en chaîne datetime

commentaires