Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Conversion de fuseaux horaires

7 réponses
Avatar
Mathieu Goutelle
Bonjour,

Je n'arrive pas à voir pourquoi le bout de code suivant ne me donne pas
le résultat attendu, i.e. '2006-03-08 12:30 CET'.

>>> import time;
>>> time.strftime('%Y-%m-%d %H:%M %Z', time.strptime('2006-03-08 11:30
GMT', '%Y-%m-%d %H:%M %Z'));
'2006-03-08 11:30 CET'

Cordialement,
--
Q: Connaissez-vous la différence entre l'ignorance et l'apathie ?
R: J'en sais rien et je m'en fous.
Mathieu Goutelle - <URL:http://www.cadichonne.net/>

7 réponses

Avatar
jean-michel bain-cornu
Bonjour,
Mathieu Goutelle wrote:
Bonjour,

Je n'arrive pas à voir pourquoi le bout de code suivant ne me donne pas
le résultat attendu, i.e. '2006-03-08 12:30 CET'.


import time
time.strftime('%Y-%m-%d %H:%M %Z', time.strptime('2006-03-08 11:30 GMT', '%Y-%m-%d %H:%M %Z'))
'2006-03-08 11:30 CET'




Cordialement,


Perso, je suis à Paris (gmt +1), sous win xp, paramétré pour gérer
l'heure d'été. J'ai fait mes tests sous python 2.4.2
On a l'impression que le paramètre GMT ne sert à rien dans ton cas (si
on met "Paris, Madrid" à la place, on a le même résultat).

Par contre avec gmtime() :
gmt= time.gmtime(time.mktime(time.strptime('2006-03-08 11:30 GMT',
'%Y-%m-%d %H:%M %Z')))



gmt
(2006, 3, 8, 10, 30, 0, 2, 67, 0)



on a bien une conversion qui se fait.
De la même manière :
lt= time.localtime(time.mktime(time.strptime('2006-03-08 11:30
GMT', '%Y-%m-%d %H:%M %Z')))



lt
(2006, 3, 8, 11, 30, 0, 2, 67, 0)



Donne bien le même résultat que ta commande initiale.

On formatte tout ça avec :
time.strftime('%Y-%m-%d %H:%M %Z', gmt)
'2006-03-08 10:30 Paris, Madrid'



time.strftime('%Y-%m-%d %H:%M %Z', lt)
'2006-03-08 11:30 Paris, Madrid'



et on voit que si on veut convertir, il faut passer explicitement par
time.gmtime()

Ceci dit, ça ne répond pas à ta question.
A+
jm




Avatar
Gerard Flanagan
Mathieu Goutelle wrote:

Bonjour,

Je n'arrive pas à voir pourquoi le bout de code suivant ne me donne pas
le résultat attendu, i.e. '2006-03-08 12:30 CET'.

import time;
time.strftime('%Y-%m-%d %H:%M %Z', time.strptime('2006-03-08 11:30
GMT', '%Y-%m-%d %H:%M %Z'));



'2006-03-08 11:30 CET'




from time import strftime, strptime

x = strptime( '2006-03-08 11:30', '%Y-%m-%d %H:%M')
print
print 'x: ', x
y = strftime( '%Y-%m-%d %H:%M %Z', x )
print 'y: ', y

resultat, pour moi en Irelande (donc GMT), avec Python 2.4 et sous
Windows:

x: (2006, 3, 8, 11, 30, 0, 2, 67, -1)
y: 2006-03-08 11:30 GMT Standard Time

pour toi?

x: (2006, 3, 8, 11, 30, 0, 2, 67, -1)
y: 2006-03-08 12:30 CET

n'est-ce pas? Sinon, je ne sais pas!

Gerard




Avatar
Gerard Flanagan
Gerard Flanagan wrote:

Mathieu Goutelle wrote:

Bonjour,

Je n'arrive pas à voir pourquoi le bout de code suivant ne me donne p as
le résultat attendu, i.e. '2006-03-08 12:30 CET'.

import time;
time.strftime('%Y-%m-%d %H:%M %Z', time.strptime('2006-03-08 11:30
GMT', '%Y-%m-%d %H:%M %Z'));



'2006-03-08 11:30 CET'




from time import strftime, strptime

x = strptime( '2006-03-08 11:30', '%Y-%m-%d %H:%M')
print
print 'x: ', x
y = strftime( '%Y-%m-%d %H:%M %Z', x )
print 'y: ', y

resultat, pour moi en Irelande (donc GMT), avec Python 2.4 et sous
Windows:

x: (2006, 3, 8, 11, 30, 0, 2, 67, -1)
y: 2006-03-08 11:30 GMT Standard Time

pour toi?

x: (2006, 3, 8, 11, 30, 0, 2, 67, -1)
y: 2006-03-08 12:30 CET

n'est-ce pas? Sinon, je ne sais pas!



sous FreeBSD 6.0:

$setenv TZ "Europe/Paris" (- csh shell)

python:

from time import strptime, strftime, tzname

in: tzname
out: ('CET', 'CEST')

in: x = strptime('15:07 GMT', '%H:%M %Z')
in: x
out: (1900, 1,1, 15, 7, 0, 0, 1, 0)
in: y = strftime( '%H:%M %Z', x)
in: y
out: '15:07 CET'

donc il semble que strftime simplement traduit le '%Z' du valeur de
os.environ['TZ'] et ne convertit pas le '%H'.

Gerard

Gerard





Avatar
Mathieu Goutelle
Bonjour,

Dans l'article ,
Gerard Flanagan a écrit :

pour toi?


La même chose...
x: (2006, 3, 8, 11, 30, 0, 2, 67, -1)
y: 2006-03-08 11:30

C'est pas glop du tout... Moi qui dois gérer des dates de plein de
fuseaux horaires, je suis bien embêté. Une idée ?

Cordialement,
--
Q: Connaissez-vous la différence entre l'ignorance et l'apathie ?
R: J'en sais rien et je m'en fous.
Mathieu Goutelle - <URL:http://www.cadichonne.net/>

Avatar
Mathieu Goutelle
(re)Bonjour,

Dans l'article ,
Gerard Flanagan a écrit :

donc il semble que strftime simplement traduit le '%Z' du valeur de
os.environ['TZ'] et ne convertit pas le '%H'.


C'est bien ce qu'il me semble aussi. Ça ne semble pas un comportement
normal, mais je suis surpris d'être le premier à découvrir ça.

Cordialement,
--
Q: Connaissez-vous la différence entre l'ignorance et l'apathie ?
R: J'en sais rien et je m'en fous.
Mathieu Goutelle - <URL:http://www.cadichonne.net/>

Avatar
Gerard Flanagan
Mathieu Goutelle wrote:

Bonjour,

Dans l'article ,

pour toi?


La même chose...
x: (2006, 3, 8, 11, 30, 0, 2, 67, -1)
y: 2006-03-08 11:30

C'est pas glop du tout... Moi qui dois gérer des dates de plein de
fuseaux horaires, je suis bien embêté. Une idée ?



un truc comme:

import time

offsets = { 'GMT':0, 'CET':1 }

tz = time.strftime('%Z', time.gmtime())

def strftime2( fmt, t, offset):
s = list(t)
s[3] += offset
return time.strftime( fmt, s )

?

Gerard


Avatar
rejoc
Mathieu Goutelle wrote:

Bonjour,

Dans l'article ,
pour toi?
La même chose...

x: (2006, 3, 8, 11, 30, 0, 2, 67, -1)
y: 2006-03-08 11:30

C'est pas glop du tout... Moi qui dois gérer des dates de plein de
fuseaux horaires, je suis bien embêté. Une idée ?



un truc comme:

import time

offsets = { 'GMT':0, 'CET':1 }

tz = time.strftime('%Z', time.gmtime())

def strftime2( fmt, t, offset):
s = list(t)
s[3] += offset
return time.strftime( fmt, s )

?

Gerard

Le problème de conversion de fuseaux horaires n'est malheureusement pas

aussi simple car il faut tenir compte des changements d'heures
été/hiver. Et ceux-ci ne se font pas forcement à la même "période"
chaque année.

Par exemple, en France, aujourd'hui on repasse à l'heure d'hiver le
dernier dimanche d'octobre alors qu'il y a 15 ans c'était le dernier
dimanche de septembre... Et si les machines ont les tables/règles
courantes de conversion, elles n'ont pas les précédentes et leurs
périodes d'utilisation.

Attention aussi, tous les deltas entre fuseaux ne sont pas des heures
entières...