DOSTIMETODATE (CONVERTION DATE ET TIME DE DOS VERS UN TYPE DATE)

cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 - 19 mai 2006 à 15:41
draluorg Messages postés 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 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.

https://codes-sources.commentcamarche.net/source/37664-dostimetodate-convertion-date-et-time-de-dos-vers-un-type-date

draluorg Messages postés 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 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és 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
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és 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
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és 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 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és 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
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és 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 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

DosTimeToDateA = DateSerial(SysTime.wYear, SysTime.wMonth, SysTime.wDay) + TimeSerial(SysTime.wHour, SysTime.wMinute, SysTime.wSecond)

End Function


++
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
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és 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
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és 516 Date d'inscription samedi 3 février 2001 Statut Membre Dernière intervention 24 octobre 2006 2
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és 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
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és 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
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és 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
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és 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
19 mai 2006 à 16:30
et voilà, EB, c'est "Snippeté"
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
19 mai 2006 à 15:41
Snippet ! ;)
Rejoignez-nous