DOSTIMETODATE (CONVERTION DATE ET TIME DE DOS VERS UN TYPE DATE)
cs_EBArtSoft
Messages postés4525Date d'inscriptiondimanche 29 septembre 2002StatutModérateurDernière intervention22 avril 2019
-
19 mai 2006 à 15:41
draluorg
Messages postés625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 novembre 2010
-
17 sept. 2006 à 20:23
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
draluorg
Messages postés625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 novembre 2010 17 sept. 2006 à 20:23
Ok merci les gars, donc l'utilisation de FileTimeToLocalFileTime est obsolete dans ce cas si...
Quelqu'un sait dans quel cas il doit etre utilise ou non ?
++
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 17 sept. 2006 à 15:40
je ne doutais pas qu'il ai eu raison (Winrar n'affiche pas les secondes)...
sacrées parenthèses^^
cs_EBArtSoft
Messages postés4525Date d'inscriptiondimanche 29 septembre 2002StatutModérateurDernière intervention22 avril 20199 17 sept. 2006 à 14:18
Ren> Draluorg a raison ! je suis passé par la pour utiliser ta fonction dans un de mes prog et effectivement il y a une erreur !
Il faut lire : nSecond = (vnTime Mod &H20&) * 2
voili-voilou c'est corrigé ;)
@+
draluorg
Messages postés625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 novembre 2010 17 sept. 2006 à 13:11
re,
Ok merci, je vais enlever le FileTimeToLocalFileTime et tanpis pour les quelques secondes de difference...
Merci pour ta reponse :)
++
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 17 sept. 2006 à 11:19
sûr de mon code uniquement en ce qu'il me donne le même résultat que Winrar, avec les dates/heures de mes fichiers, dans une archive CAB...
et que j'ai suivi la description de la date, trouvée sur un newsgroup.
ce qui "cloche" ? je n'en sais rien... un décalage dans les heures fourni par le FileTimeToLocalFileTime... mais pour les secondes, je n'en sais rien sans y passer davantage de temps, en tous cas.
draluorg
Messages postés625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 novembre 2010 17 sept. 2006 à 00:08
Salut,
J'utilise les api pour faire la meme chose, mais je n'obtiens pas le meme resultat pour les secondes...
Est tu sur de ton code, si oui peux tu me dire ce qui cloche dans le mien ?
Private Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type
Private Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Private Declare Function FileTimeToSystemTime Lib "kernel32" (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) As Long
Private Declare Function DosDateTimeToFileTime Lib "kernel32" (ByVal wFatDate As Long, ByVal wFatTime As Long, lpFileTime As FILETIME) As Long
Private Declare Function FileTimeToLocalFileTime Lib "kernel32" (lpFileTime As FILETIME, lpLocalFileTime As FILETIME) As Long
Public Function DosTimeToDateA(ByVal vnDate As Long, ByVal vnTime As Long) As Date
Dim Ta As FILETIME
Dim Tb As FILETIME
Dim SysTime As SYSTEMTIME
DosDateTimeToFileTime vnDate, vnTime, Ta
FileTimeToLocalFileTime Ta, Tb
FileTimeToSystemTime Tb, SysTime
bouv
Messages postés1411Date d'inscriptionmercredi 6 août 2003StatutMembreDernière intervention 3 mars 20191 22 mai 2006 à 10:57
Salut,
En fait ma question portait sur les deux points
Je ne voyais pas l'interet du Clng puisque les variables sont typées en long
Et je ne comprennait pas non plus à quoi sert And &hFFFF& (ce que je ne comprends toujours pas très bien ^^).
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 22 mai 2006 à 10:02
non, effectivement...
je transmettais avant des Integer, d'où ce CLng...
mais "écrasant" maintenant mes paramètres d'entrée, j'avais besoin de Long, en entrée, et ce transtypage est resté ^^
je pensais que la question de Bouv portait plus sur l'opération And &hFFFF& ^^
cs_Warning
Messages postés516Date d'inscriptionsamedi 3 février 2001StatutMembreDernière intervention24 octobre 20062 21 mai 2006 à 19:16
Salut, le CLng(...) est-il pour autant vraiment nécessaire étant donné que ces variables sont en long (pas en integer) ?
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 20 mai 2006 à 13:56
les données sont lues dans des Integer. Conformément a la description que j'ai faite au début, date et time sont stockés sur deux octets chacun.
VB utilise des entiers signés.
par exemple, lorsque je lis ma donnée, j'ai, dans mon entier, -25221 (au lieu de 40315 en non signé)
seulement, il me faut la valeur correspondante, en non signé...
"j'écrase" (en fait pas vraiment : ByVal) les valeurs recues par la version non signée de la chose... (en supprimant les bits obtenus par le CLng &hFFFF0000&)
cette étape peut paraitre étrange, j'en conviens, mais il faut bien se plier au contraintes de VB ^^
bouv
Messages postés1411Date d'inscriptionmercredi 6 août 2003StatutMembreDernière intervention 3 mars 20191 20 mai 2006 à 13:23
Salut,
Je ne suis pas sûr d'avoir bien compris l'utilité des lignes
vnTime = CLng(vnTime) And &HFFFF&
et
vnDate = CLng(vnDate) And &HFFFF&
Puisque ces deux variables sont déjà typées en Long
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 19 mai 2006 à 16:31
pour test, en entrée :
date = 13415
time = -25221
sortie = 07/03/2006 19:43:22
au passage, je tiens a remercier VB6, et ses entiers (forcément) signés...
qui m'obligent à ajouter cette étape :
vnTime = CLng(vnTime) And &HFFFF&
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 19 mai 2006 à 16:30
et voilà, EB, c'est "Snippeté"
cs_EBArtSoft
Messages postés4525Date d'inscriptiondimanche 29 septembre 2002StatutModérateurDernière intervention22 avril 20199 19 mai 2006 à 15:41
17 sept. 2006 à 20:23
Quelqu'un sait dans quel cas il doit etre utilise ou non ?
++
17 sept. 2006 à 15:40
sacrées parenthèses^^
17 sept. 2006 à 14:18
Il faut lire : nSecond = (vnTime Mod &H20&) * 2
voili-voilou c'est corrigé ;)
@+
17 sept. 2006 à 13:11
Ok merci, je vais enlever le FileTimeToLocalFileTime et tanpis pour les quelques secondes de difference...
Merci pour ta reponse :)
++
17 sept. 2006 à 11:19
et que j'ai suivi la description de la date, trouvée sur un newsgroup.
ce qui "cloche" ? je n'en sais rien... un décalage dans les heures fourni par le FileTimeToLocalFileTime... mais pour les secondes, je n'en sais rien sans y passer davantage de temps, en tous cas.
17 sept. 2006 à 00:08
J'utilise les api pour faire la meme chose, mais je n'obtiens pas le meme resultat pour les secondes...
Est tu sur de ton code, si oui peux tu me dire ce qui cloche dans le mien ?
Private Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type
Private Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Private Declare Function FileTimeToSystemTime Lib "kernel32" (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) As Long
Private Declare Function DosDateTimeToFileTime Lib "kernel32" (ByVal wFatDate As Long, ByVal wFatTime As Long, lpFileTime As FILETIME) As Long
Private Declare Function FileTimeToLocalFileTime Lib "kernel32" (lpFileTime As FILETIME, lpLocalFileTime As FILETIME) As Long
Public Function DosTimeToDateA(ByVal vnDate As Long, ByVal vnTime As Long) As Date
Dim Ta As FILETIME
Dim Tb As FILETIME
Dim SysTime As SYSTEMTIME
DosDateTimeToFileTime vnDate, vnTime, Ta
FileTimeToLocalFileTime Ta, Tb
FileTimeToSystemTime Tb, SysTime
DosTimeToDateA = DateSerial(SysTime.wYear, SysTime.wMonth, SysTime.wDay) + TimeSerial(SysTime.wHour, SysTime.wMinute, SysTime.wSecond)
End Function
++
22 mai 2006 à 10:57
En fait ma question portait sur les deux points
Je ne voyais pas l'interet du Clng puisque les variables sont typées en long
Et je ne comprennait pas non plus à quoi sert And &hFFFF& (ce que je ne comprends toujours pas très bien ^^).
22 mai 2006 à 10:02
je transmettais avant des Integer, d'où ce CLng...
mais "écrasant" maintenant mes paramètres d'entrée, j'avais besoin de Long, en entrée, et ce transtypage est resté ^^
je pensais que la question de Bouv portait plus sur l'opération And &hFFFF& ^^
21 mai 2006 à 19:16
20 mai 2006 à 13:56
VB utilise des entiers signés.
par exemple, lorsque je lis ma donnée, j'ai, dans mon entier, -25221 (au lieu de 40315 en non signé)
seulement, il me faut la valeur correspondante, en non signé...
"j'écrase" (en fait pas vraiment : ByVal) les valeurs recues par la version non signée de la chose... (en supprimant les bits obtenus par le CLng &hFFFF0000&)
cette étape peut paraitre étrange, j'en conviens, mais il faut bien se plier au contraintes de VB ^^
20 mai 2006 à 13:23
Je ne suis pas sûr d'avoir bien compris l'utilité des lignes
vnTime = CLng(vnTime) And &HFFFF&
et
vnDate = CLng(vnDate) And &HFFFF&
Puisque ces deux variables sont déjà typées en Long
19 mai 2006 à 16:31
date = 13415
time = -25221
sortie = 07/03/2006 19:43:22
au passage, je tiens a remercier VB6, et ses entiers (forcément) signés...
qui m'obligent à ajouter cette étape :
vnTime = CLng(vnTime) And &HFFFF&
19 mai 2006 à 16:30
19 mai 2006 à 15:41