Bonjour,
J'ai 4 octets (unsigned long) qui représentent une date GMT.
Comment puis-je convertir ces 4 octets en une chaine au format "11/08/2004" par exemple ?
Bonjour,
J'ai 4 octets (unsigned long) qui représentent une date GMT.
Comment puis-je convertir ces 4 octets en une chaine au format "11/08/2004" par exemple ?
Bonjour,
la fonction CDate, ne fonctionne pas dans ton cas?
D'où viennent c'est 4 octets? Essaye avec les valeurs ascii :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 date_fr = chr(mid(date_gmt,1,1) & "/" & chr(mid(date_gmt,2,1) & "/" & chr(mid(date_gmt,3,1) & "/" & chr(mid(date_gmt,4,1)
Les 4 octets sont un unsigned long qui représente le nombre de secondes depuis le 01/01/1970
Dans cet exemple, l'octet0 est l'octet de poids faible.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Dim d As Date d = CDate(octet0 + octet1 * 256 + octet2 * 65536 + octet3 * 16777216)
Il suffit de regarder la doc de CDate pour voir que CDate(un long) ne donne rien.
Si on essaye, on vérifie bien que ça ne fonctionne pas.
J'ai déjà la date, il me reste les heures
En entrée, j'ai lgDate, un long qui contient mes 4 octets
En sortie, je renvoie dateRetour qui est de type Date()
Il ne reste plus que les heures
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 dateDebut = DateSerial(1970, 1, 1) Dim nNbJours As Long nNbJours = CLng(lgDate / 86400) dateRetour = dateDebut + nNbJours
Et comme çà ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Dim d As Date d = DateAdd("s", octet0 + octet1 * 256 + octet2 * 65536 + octet3 * 16777216, DateSerial(1970, 1, 1))
C'est ce que j'avais écrit mais en plus joli.
Je garde cette solution :
Merci !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 dateRetour = DateAdd("s", CDbl(lgDate), DateSerial(1970, 1, 1) + TimeSerial(2, 0, 0))
Nb : je ne sais pas pourquoi, mais il faut que je décale de exactement 2 heures pour avoir la bonne heure.
Et en hiver, France (hiver) = GMT + combien ?
Partager