Le format des dateheures d'un Active Directory est de la forme suivante. Cette valeur correspond au nombre de dixième de microsecondes depuis le 1° Janvier 1601.
Il faut donc utiliser les propriétés des dates et des heures. Voici le code WLanguage :
Procedure LDAPEntierVersDateHeure(nDateHeure est un entier sans signe sur 8 octets) :DateHeure nTemp est un entier
dhDateRef est une DateHeure ="16010101000000000"
nDateHeure = nDateHeure/10 000
nTemp = Modulo(nDateHeure,1000) dhDateRef.Milliseconde= nTemp nDateHeure = (nDateHeure - nTemp)/1000
nTemp = Modulo(nDateHeure,60) dhDateRef.Seconde = nTemp nDateHeure = (nDateHeure - nTemp)/60
nTemp = Modulo(nDateHeure,60) dhDateRef.Minute = nTemp nDateHeure = (nDateHeure - nTemp)/60
nTemp = Modulo(nDateHeure,24) dhDateRef.Heure = nTemp nDateHeure = (nDateHeure - nTemp)/24
dhDateRef.Jour += nDateHeure
RENVOYER DateHeureUTCVersLocale(dhDateRef)
Une autre solution existe, c'est une formule basée sur des constantes. Elle est plus simple mais malheureusement elle ne gère pas les millisecondes.
Procedure LDAPEntierVersDateHeure(nDateHeure est un entier sans signe sur 8 octets) :DateHeure n1, n2 sont des entiers sans signe sur 8 octets n1 = 10000000 n2 = 11644473600 x est une DateHeure = EpochVersDateHeure(nDateHeure / n1 - n2)
RENVOYER x
|