[Ex] Autour du TimeStamp
Posté : mer. 02 févr. 2011 21:46
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 :
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 :
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 :
Exemples:
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")
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")
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