[Ex] Autour du TimeStamp

Partagez vos scripts, et vos applications AutoIt.
Règles du forum
.
Répondre
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

[Ex] Autour du TimeStamp

#1

Message par timmalos »

Bonjour à tous. J'ai été confronté a un petit problème que j'ai pu résoudre recemment, je vais donc partager avec vous ces petits details concernant les TimeStamps au cas ou quelqu'un en aurait besoin.

Pour ceux qui ne savent pas ce que c'est, Go Wikipedia :http://en.wikipedia.org/wiki/Unix_time
Donc en Autoit, pour connaitre le Timestamp Unix, c'est avec cette fonction :

Code : Tout sélectionner

#include <date.au3>
$iTimeStamp = _DateAdd('s', $unixtime, "1970/01/01 00:00:00")
Qui va calculer le nombre de secondes entre votre temps et le premier janvier 1970.
Le problème qui se pose, c'est que la majorité des TimeStamp Unix qu'on peut trouver sur le web, par exemple avec PHP, retournent la Valeur du timestamp selon le fuseau horaire UTC.

Hors en France, nous ne sommes pas en UTC comme vous le savez mais en UTC+1, mais vous me direz il suffit d'enlever 3600 secondes et le tour est joué, mais il reste le problème de l'heure d'hiver/heure d'été qui se pose, car on passe en UTC+2 pendant l'été, et comme en bons francais on aime se compliquer la tache, la date de changement d'heures change tous les ans, impossible de se caler sur le calendrier.

Voila donc comment vous y prendre :

Code : Tout sélectionner

#include <date.au3>
$unixtime = 1272700408
$timezone = _Date_Time_GetTimeZoneInformation()
$unixtime = $unixtime - ($timezone[1] + $timezone[7]) * 60
$iDateCalc = _DateAdd('s', $unixtime, "1970/01/01 00:00:00")
Et comme je vous aime bien, je partage une fonction qui est plus rapide que _DateAdd en faisant la même chose si vous avez beaucoup de conversions à faire , Disponible ici :

Code : Tout sélectionner

Func _EPOCH_decrypt($epoch_time)
    Local $Day2Add = Int($epoch_time / 86400)
    Local $iTimeVal = Mod($epoch_time, 86400)
    If $iTimeVal < 0 Then
        $Day2Add -= 1
        $iTimeVal += 86400
    EndIf
    Local $i_wFactor = Int((573371.75 + $Day2Add) / 36524.25)
    Local $i_xFactor = Int($i_wFactor / 4)
    Local $i_bFactor = 2442113 + $Day2Add + $i_wFactor - $i_xFactor
    Local $i_cFactor = Int(($i_bFactor - 122.1) / 365.25)
    Local $i_dFactor = Int(365.25 * $i_cFactor)
    Local $i_eFactor = Int(($i_bFactor - $i_dFactor) / 30.6001)
    Local $asDatePart[3]
    $asDatePart[2] = $i_bFactor - $i_dFactor - Int(30.6001 * $i_eFactor)
    $asDatePart[1] = $i_eFactor - 1 - 12 * ($i_eFactor - 2 >= 13)
    $asDatePart[0] = $i_cFactor - 4716 + ($asDatePart[1] < 3)
    Local $asTimePart[3]
    $asTimePart[0] = Int($iTimeVal / 3600)
    $iTimeVal = Mod($iTimeVal, 3600)
    $asTimePart[1] = Int($iTimeVal / 60)
    $asTimePart[2] = Mod($iTimeVal, 60)
    Return SetError(0, 0, StringFormat("%.2d/%.2d/%.2d %.2d:%.2d:%.2d", $asDatePart[0], $asDatePart[1], $asDatePart[2], $asTimePart[0], $asTimePart[1], $asTimePart[2]))
EndFunc   ;==>_EPOCH_decrypt
 

Exemples:
► Afficher le texte
Avatar du membre
sksbir
Niveau 7
Niveau 7
Messages : 384
Enregistré le : lun. 26 oct. 2009 17:57
Localisation : Lyon
Status : Hors ligne

Re: [Ex] Autour du TimeStamp

#2

Message par sksbir »

Bonjour, et merci pour ce partage qui peut être très utile :) ( enfin, jusqu'en 2038 il me semble... :lol: )

En plus, grâce à toi, je viens de découvrir encore une fonction hallucinante dans autoit : _Date_Time_GetTimeZoneInformation() , ainsi que toutes les fonctions de la même bibliothèque...
Avatar du membre
aurel2108
Niveau 4
Niveau 4
Messages : 90
Enregistré le : dim. 17 juil. 2011 21:19
Status : Hors ligne

Re: [Ex] Autour du TimeStamp

#3

Message par aurel2108 »

Désolé de remonter ce topic mais j'aurais aimé savoir si il y avait possibilité de faire l'inverse, c'est à dire transformer un timestamp en date normale ? :/
Ne rien dire même quand on sait peut dés fois être la meilleure des solutions. (aurel2108)
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [Ex] Autour du TimeStamp

#4

Message par Tlem »

Cet exemple issu de la documentation de DateAdd() vous convient-il ?

Code : Tout sélectionner

; Calculated eventlogdate which returns second since 1970/01/01 00:00:00
$sNewDate = _DateAdd( 's',1087497645, "1970/01/01 00:00:00")
MsgBox( 4096, "", "Date: " & $sNewDate )
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
aurel2108
Niveau 4
Niveau 4
Messages : 90
Enregistré le : dim. 17 juil. 2011 21:19
Status : Hors ligne

Re: [Ex] Autour du TimeStamp

#5

Message par aurel2108 »

Merci beaucoup Tlem, c'est exactement ce que je cherchais. :D
Et encore désolé du déterrage de topic. :/
Ne rien dire même quand on sait peut dés fois être la meilleure des solutions. (aurel2108)
Répondre