Convertir date+heure en string vers FILETIME [Résolu]

violent_ken 1822 Messages postés mardi 31 mai 2005Date d'inscription 26 octobre 2010 Dernière intervention - 19 févr. 2007 à 14:29 - Dernière réponse : violent_ken 1822 Messages postés mardi 31 mai 2005Date d'inscription 26 octobre 2010 Dernière intervention
- 19 févr. 2007 à 22:57
Violent Ken

Bonjour, j'aimerais pouvoir convertir une string au format "DD-MM-YYYY HH:MM:SS" (ou autre, mais avec date et time dans une même string) vers un format FILETIME, SYSTEMTIME, ou Currency.

Je sais que FILETIME est le nombre d'intervalles de 100 nanosecondes écoulées depuis le 1er janvier 1601, mais je ne pense pas que ce soit une bonne idée de faire un calcul complexe du genre :
res = (année-1601)*nbre de 100ns dans 1 année + (mois-1)*.....
avec la prise en compte les années bisextiles, la conversion en temps local...etc. pour effectuer ma conversion...

Auriez vous une idée simple ? (pas trouvé sur le net)
Merci, @+
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 19 févr. 2007 à 15:05
3
Merci
ou via APIs :

http://groups.google.fr/group/microsoft.public.vb.winapi/browse_thread/thread/9695b7f9c51adfdb/32faf3edf3dfb942?lnk=st&q=vb6+1601+date+filetime&rnum=1&hl=fr#32faf3edf3dfb942

(recherche google : "vb6 1601 date filetime")

Merci Renfield 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 73 internautes ce mois-ci

Commenter la réponse de Renfield
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 19 févr. 2007 à 15:02
0
Merci
tu dois pouvoir utiliser DateDiff
Commenter la réponse de Renfield
violent_ken 1822 Messages postés mardi 31 mai 2005Date d'inscription 26 octobre 2010 Dernière intervention - 19 févr. 2007 à 15:28
0
Merci
Violent Ken

Ah, effectivement, j'oubliais les instructions Year, Month...etc. Cà marchera nickel en passant par un SYSTEMTIME.

Merci, @+
Commenter la réponse de violent_ken
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 19 févr. 2007 à 15:45
0
Merci
Je ne comprends pas la question .

Pour moi, la répose se résumerait à ceci :

Private Sub Command1_Click()
  madate = "01-01-2006"
  monheure = "02:12:26"
  mondateheure = DateValue(madate) & " " & TimeValue(monheure)
  MsgBox mondateheure
  madate = "01/01/2006"
  mondateheure = DateValue(madate) & " " & TimeValue(monheure)
  MsgBox mondateheure
End Sub

et ce serait toujours vrai
Que n'ai-je pas compris de ce que tu veux, donc ?
Commenter la réponse de jmfmarques
violent_ken 1822 Messages postés mardi 31 mai 2005Date d'inscription 26 octobre 2010 Dernière intervention - 19 févr. 2007 à 15:56
0
Merci
Violent Ken

Heu non, en fait je veux pouvoir convertir une date et une heure en FILETIME (ou SYSTEMTIME ou Currency).

Autrement dit je veux pouvoir transformer
"19/02/2007 15:50:12" en 128163737995536414 (enregistré dans une currency, un FILETIME ou en SYSTEMTIME), cette valeur représentant le nombre de 100ns écoulées depuis le 1er janvier 1601. C'est ce format de date qui est utilisé par Windows.

Donc je vais faire :

Dim ST as SYSTEMTIME
ST.wDay=Day(ma date)
ST.wYear=Year(ma date)
...
ST.wHour=Hour(mon heure)
...

ensuite je fais :

Dim FT as FILETIME
et je convertis en FILETIME :

SystemTimeToFileTime ST,FT

et puis je me ramène à ma Currency :

CopyMemory MaCurrency, FT, LenB(FT)

Voilà, @+
Commenter la réponse de violent_ken
violent_ken 1822 Messages postés mardi 31 mai 2005Date d'inscription 26 octobre 2010 Dernière intervention - 19 févr. 2007 à 16:03
0
Merci
Violent Ken

Voilà, çà donne çà :





'=======================================================


'transforme une string (date) en currency


'=======================================================


Public Function DateString2Currency(ByVal sDate As String) As Currency
Dim FT As FILETIME
Dim d As Date
Dim t As Date
Dim ST As SYSTEMTIME

   d = DateValue(sDate)
   t = TimeValue(sDate)

   'transfome déjà en systemtime
   With ST
       .wDay = Day(d)
       .wMonth = Month(d)
       .wYear = Year(d)
       .wMinute = Minute(t)
       .wHour = Hour(t)
       .wSecond = Second(t)
   End With
   
   'passe en filetime
   SystemTimeToFileTime ST, FT
   
   'passe en currency
   DateString2Currency = FT2Currency(FT)
       
End Function


By Renfield





@+
Commenter la réponse de violent_ken
Gobillot 3140 Messages postés vendredi 14 mai 2004Date d'inscription 31 mars 2015 Dernière intervention - 19 févr. 2007 à 20:46
0
Merci
Salut,
j'utilise déjà cette conversion dans les deux sens
faut tenir de l'heure locale et heure été/hiver
3600 en hiver et 7200 en été: a déterminer avec FileTimeToLocalFileTime avec 0 comme argument
je récupére aussi les secondes (seulement sur NTFS)

    Dim wdt As Currency
    Dim w   As Currency
    Dim s   As Integer
    Dim dt  As Date
    Dim wz  As Double
   
    wdt = CCur("12816373799553,6414")

    w = Int(wdt / 1000):
    s = (wdt - w * 1000):
    dt = (w + 3600) / 86400 - 109205
    MsgBox dt & " " & s
   
    wz = dt + 109205
    w = wz * 86400 - 3600
    wdt = w * 1000 + s
    MsgBox wdt

Daniel
Commenter la réponse de Gobillot
violent_ken 1822 Messages postés mardi 31 mai 2005Date d'inscription 26 octobre 2010 Dernière intervention - 19 févr. 2007 à 22:57
0
Merci
Violent Ken

Exact, j'ai oublié d'utiliser l'API FileTimeToLocalFileTime.

Pour la conversion dans l'autre sens, j'utilise ceci :





'=======================================================


'transforme une date en FILETIME vers une date en string


'Private Function FileTimeToString(fDate As FILETIME, Optional ByVal bConvertToLocal As Boolean True) As String
Dim sDate As SYSTEMTIME
Dim sDay As String
Dim sMonth As String
Dim sYear As String
Dim sHour As String
Dim sMinute As String
Dim sSecond As String
Dim s As String

   If bConvertToLocal Then
       'conversion en LocalFileTime (temps universel ==> temps local)
       FileTimeToLocalFileTime fDate, fDate
   End If
   
   'conversion en SystemTime
   FileTimeToSystemTime fDate, sDate
   
   'conversion en string vers un format du genre 24/04/2000 09:50:59
   sDay = Trim$(IIf(sDate.wDay < 10, "0" & Trim$(Str$(sDate.wDay)), Trim$(Str$(sDate.wDay))))
   sMonth = Trim$(IIf(sDate.wMonth < 10, "0" & Trim$(Str$(sDate.wMonth)), Trim$(Str$(sDate.wMonth))))
   sHour = Trim$(IIf(sDate.wHour < 10, "0" & Trim$(Str$(sDate.wHour)), Trim$(Str$(sDate.wHour))))
   sMinute = Trim$(IIf(sDate.wMinute < 10, "0" & Trim$(Str$(sDate.wMinute)), Trim$(Str$(sDate.wMinute))))
   sSecond = Trim$(IIf(sDate.wSecond < 10, "0" & Trim$(Str$(sDate.wSecond)), Trim$(Str$(sDate.wSecond))))
   sYear = sDate.wYear
   
   s = sDay & "/" & sMonth & "/" & sYear & " " & sHour & ":" & sMinute & ":" & sSecond
   FileTimeToString = s

End Function


By Renfield









Peut être pas très optimisé, mais c'est assez explicite.

@+
Commenter la réponse de violent_ken

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.