violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 2010
-
19 févr. 2007 à 14:29
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 2010
-
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, @+
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 19 févr. 2007 à 15:56
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)
...
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)
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 19 févr. 2007 à 20:46
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
'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