Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 14/08/2006, à 17:45

Vincent cosmo

python: fuseaux horaires, heure d'été, heure d'hiver

Bonjour,

J'aimerais faire une sorte de compte à rebours. Voici le topo:

Chaque matin, disons, on va rechercher la variable stampserver (elle correspond à un moment ultérieur ds la journée):  "%Y-%m-%d %H:%M:%S" donné par un serveur en Belgique, il s'agit donc d'heure locale (pour les distraits: même fuseau horaire que la France).

J'aimerais ensuite afficher le nbre de minutes et le nbre d'heures qu'il reste avant le moment stampserver.

Voici le bout de code que j'ai fait, malheureusement je dois retirer une heure à stampserver pour que cela soit correct (et pourtant je suis ds le même fuseau horaire que le serveur).

	timst = strptime(stampserver,"%Y-%m-%d %H:%M:%S")
	laDLA = strftime("DLA à %H:%M le %d/%m",timst)
	difftime = mktime(timst)-time()
	
	tupletime = localtime(difftime-3600)
	
	print strftime("DLA dans %Hh%M",tupletime)

De plus j'aimerais que la valeur retournée tienne compte du fuseau horaire (et aussi du fait que dans certains pays il n'y a pas d'heure d'été/hiver contrairement au pays où se trouve le serveur).

Pourriez-vous m'aider?

Vincent smile

Dernière modification par Vincent cosmo (Le 14/08/2006, à 17:47)

Hors ligne

#2 Le 16/08/2006, à 23:48

Vincent cosmo

Re : python: fuseaux horaires, heure d'été, heure d'hiver

personne pour m'aiguiller ? :'(

Hors ligne

#3 Le 18/08/2006, à 08:25

mccricri

Re : python: fuseaux horaires, heure d'été, heure d'hiver

Aiguiller, je sais pas, mais je peux réfléchir avec toi tongue

>>> time.localtime()
(2006, 8, 18, 8, 41, 43, 4, 230, 1)
>>> time.gmtime()
(2006, 8, 18, 6, 41, 46, 4, 230, 0)

Ici on voit que les 2 valeurs sont différentes en "heure" (6 et 8), alors qu'il est 8h41
Mais dans localtime(), il y a l'information qui dit qu'est inclus le "isdst" (voir la doc), c'est à dire le "décalage" tenant compte des fuseaux horaires et hiver/été.

Or

>>> time.strptime("2006-08-18 8:36:36","%Y-%m-%d %H:%M:%S")
(2006, 8, 18, 8, 36, 36, 4, 230, -1)

Là, il y a clairement une différence.

D'après la doc du module time :

DST (Daylight Savings Time) flag (-1, 0 or 1)
If the DST flag is 0, the time is given in the regular time zone;
if it is 1, the time is given in the DST time zone;
if it is -1, mktime() should guess based on the date and time.

Donc, avec -1, quand tu refais un mktime(), il essaye de deviner. Or, apparement il devine pas très bien.
Peut-être tu peux simplement le forcer, puisque tu sais que c'est en localtime, en mettant à 1.

timst = strptime(stampserver,"%Y-%m-%d %H:%M:%S")
# passer en array plutot que tuple
timst = [x for x in timst]
timst[8] = 1

Maintenant, l'heure sera considérée comme étant dans la valeur locale à l'utilisateur, ce qui veut dire que ton prog ne marche que pour le fuseau horaire de belgique.

Le mieux serait que le serveur donne l'heure en GMT, alors tu peux mettre le DST à 0 et il fera la conversion automatiquement dans la bonne valeur.
Si tu peux pas changer le serveur, il faut que ton prog tienne compte que celui-ci est dans le fuseau belge et donc retire 1 heure à stampserver.

Et finalement, je viens d'apercevoir que dans le module time, il y a plusieurs variables qui peuvent servir pour les calculs :

timezone -- difference in seconds between UTC and local standard time
altzone -- difference in  seconds between UTC and local DST time
daylight -- whether local time should reflect DST
tzname -- tuple of (standard time zone name, DST time zone name)

Hors ligne

#4 Le 18/08/2006, à 23:37

Vincent cosmo

Re : python: fuseaux horaires, heure d'été, heure d'hiver

Merci mccricri smile  j'essaie ça demain

Vincent

Hors ligne

#5 Le 19/08/2006, à 11:26

aleph

Re : python: fuseaux horaires, heure d'été, heure d'hiver

... et n'oublie pas le module datetime !