Page 1 sur 1
Conversion TimeStamp Microsoft
Publié : ven. 02/mars/2012 11:27
par gold94
Bonjour à tous
Débutant en PureBasic, mais pas en Basic (utilisateur du GFA sur Amiga, il y bien longtemps.....)
Je me casse les dents sur une histoire de conversion de TimeStamp, j'ai essayé la commande "date"
mais je n'arrive à rien.
En gros j'ai un fichier binaire provenant d'une station météo WS3600 et je dois y faire le ménage,
doublon de mesure à retirer, je lis sans problème les données, température, pression etc ..... mais
la date

.
Je cherche donc à faire la conversion de 40909.001539351855 (timestamp Microsoft) --> 01/01/2012 00:02:13
et aussi l'inverse, la commande "Date" part du TimeStamp Unix et mon fichier utilise le timeStamp Microsoft (quelle idée ...).
Voila s'il y a des spécialistes du conversion de temps ...... je m'en remet à vous ....
Thierry
Re: Conversion TimeStamp Microsoft
Publié : ven. 02/mars/2012 11:58
par Backup
je ne connais pas Timestamp ....
mais en Purebasic la fonction
permet de retourner une date au format en fonction du nombre de secondes écoulées depuis le '01/01/1970 0:00:00').
Code : Tout sélectionner
;40909.001539351855 (timestamp Microsoft) --> 01/01/2012 00:02:13
Annee=1970
Mois=01
Jour=01
Heure=0
Minute=1
Seconde=0
e= Date(Annee, Mois, Jour, Heure, Minute, Seconde)
debug "nombre de secondes depuis la date spécifiée (01/01/ 1970 + 1 minute) "+str(e)
; ******************************************************************************
e= Date()
debug "nombre de secondes depuis la 01/01/1970:00:00:00 "+str(e)
debug "date du jour :"+ FormatDate("Anné=%yyyy, Mois= %mm, Jours=%dd", e)
a partir de là , faut faire un convertisseur de valeur partant du "TimeStamp"
il existe apparemment un convertisseur en ligne ici :
http://www.timestamp.fr/
[reedit]
je lis :
Le timestamp (unix) désigne le nombre de secondes écoulées depuis le 1er janvier 1970 à minuit UTC précise
ça tombe bien la fonction Date() de purebasic aussi
ce qui gene dans ton histoire c'est le chiffre a virgule ! car il semble que TimeStamp est un entier normalement
bon , ceci est un récapitulatif des fonctions Purebasic

Re: Conversion TimeStamp Microsoft
Publié : ven. 02/mars/2012 12:20
par djes
Méthode empirique :
Code : Tout sélectionner
MyDate.d = 40909.001539351855
MyUnixDate.d = MyDate * 32398.15403
Debug FormatDate("%yyyy/%mm/%dd", MyUnixDate)
Debug FormatDate("%hh:%ii:%ss", MyUnixDate)
Re: Conversion TimeStamp Microsoft
Publié : ven. 02/mars/2012 12:28
par comtois
Moi j'ai un décalage de 133 secondes !
Code : Tout sélectionner
;En appliquant ça http://able2know.org/topic/70939-1
MS = 40909.001539351855
Unix.q = MS * 86400 - 2209161600
Debug Unix
Debug Date(2012, 01, 01, 0, 2, 13)
Re: Conversion TimeStamp Microsoft
Publié : ven. 02/mars/2012 12:34
par Droopy
Code : Tout sélectionner
ProcedureDLL UnixToMSDosDate(UnixDate) ; Convert MsDos date to Unix date
Protected Result, m
m = Year(UnixDate) - 1980
Result | (m << 25)
m = Month(UnixDate)
Result | (m << 21)
m = Day(UnixDate)
Result | (m << 16)
m = Hour(UnixDate)
Result | (m << 11)
m = Minute(UnixDate)
Result | (m << 5)
m = Second(UnixDate) / 2
Result | m
ProcedureReturn Result
EndProcedure
Code : Tout sélectionner
ProcedureDLL MSDosDateToUnix(MSDos_Date) ; Convert Unix date to MsDos date
Protected Result, y, m, d, H, Min, s
y = 1980 + (MSDos_Date >> 25) & $7F
m = (MSDos_Date >> 21) & $0F
d = (MSDos_Date >> 16) & $1F
H = (MSDos_Date >> 11) & $1F
Min = (MSDos_Date >> 5) & $3F
s = (MSDos_Date & $1F) * 2
Result = Date(y, m, d, H, Min, s)
ProcedureReturn Result
EndProcedure
Re: Conversion TimeStamp Microsoft
Publié : ven. 02/mars/2012 12:34
par Droopy
pourrait servir aussi :
Description : Get the time of a File
The 'which' parameter specifies which time you want to retrieve
0 = Time the File was created
1 = Time the file was last accessed
2 = Time the file was last written
Return 0 if it fails / Date in Purebasic format if successful
Code : Tout sélectionner
ProcedureDLL FileGetTime(File.s,Which); Get the time of a File
Result=0
Handle=CreateFile_(@File,#GENERIC_READ,#FILE_SHARE_READ|#FILE_SHARE_WRITE,0,#OPEN_EXISTING,#FILE_ATTRIBUTE_NORMAL,0)
If Handle<>#INVALID_HANDLE_VALUE
Select Which
Case 1
GetFileTime_(Handle,0,FT.FILETIME,0)
Case 2
GetFileTime_(Handle,0,0,FT.FILETIME)
Default
GetFileTime_(Handle,FT.FILETIME,0,0)
EndSelect
Result=FileTimeToDate(FT)
CloseHandle_(Handle)
EndIf
ProcedureReturn Result
EndProcedure
Re: Conversion TimeStamp Microsoft
Publié : ven. 02/mars/2012 12:36
par comtois
en fait j'ai oublié de mettre un flottant pour MS , mon calcul fonctionne
Code : Tout sélectionner
;En appliquant ça http://able2know.org/topic/70939-1
MS.d = 40909.001539351855
Unix.q = MS * 86400 - 2209161600
Debug Unix
Debug Date(2012, 01, 01, 0, 2, 13)
Debug FormatDate("%yyyy/%mm/%dd", Unix)
Debug FormatDate("%hh:%ii:%ss", Unix)
Re: Conversion TimeStamp Microsoft
Publié : ven. 02/mars/2012 12:40
par Backup
@comtois
j'avais vu ton calcul ici : ( arf tu l'avais spécifié dans le code )
http://able2know.org/topic/70939-1
ou ils expliquent que
The number of seconds in 25569 days is:
25569*24*60*60
= 2209161600
et que
The number of seconds in 1 day is:
24*60*60
= 86400
et que donc :
Code:HumanDate: Format(([unixdate]+2209161600)/86400,"dd/mm/yy hh:nn:ss")
avec tout ça notre ami gold94 a toutes les explications

( bravo a tous )
Re: Conversion TimeStamp Microsoft
Publié : ven. 02/mars/2012 15:02
par gold94
Vous êtes tous génial, un grand merci je vais pouvoir reprendre le fil de
mon programme, et faire le nettoyage dans mes fichiers météo pour les stats
2011, car suite à une modif du hardware de la station, celle-ci m'envoie 4 à 5
mesures par minute à la place d'une, résultat un fichier énorme et long très long a calculé ,
pour voir à quoi ressemble un graphe météo :
http://gold93.hd.free.fr/lameteo/index.html
Merci encore
Thierry