2010-03-25 8 views
1

Est-ce la bonne façon de convertir une chaîne UTC en heure locale permettant l'heure d'été? Il semble ok pour moi, mais on ne sait jamais :)Est-ce la bonne façon de convertir une chaîne de date-heure UTC en heure locale?

import time 
UTC_STRING = "2010-03-25 02:00:00" 
stamp = time.mktime(time.strptime(UTC_STRING,"%Y-%m-%d %H:%M:%S")) 
stamp -= time.timezone 
now = time.localtime() 
if now[8] == 1: 
    stamp += 60*60 
elif now[8] == -1: 
    stamp -= 60*60 
print 'UTC: ', time.gmtime(stamp) 
print 'Local: ', time.localtime(stamp) 

--- Résultats de la Nouvelle-Zélande (GMT + 12 dst = 1) ---

UTC: (2010, 3, 25, 2, 0, 0, 3, 84, 0) 
Local: (2010, 3, 25, 15, 0, 0, 3, 84, 1) 

Répondre

5

fuseaux horaires calculs liés ne sont pas négligeables et il y a déjà de bonnes bibliothèques disponibles par exemple Utilisez pytz, en utilisant ce que vous serez en mesure de convertir à partir de n'importe quel fuseau horaire à un autre fuseau horaire en toute confiance. l'utilisation est aussi simple que cela

>>> warsaw = pytz.timezone('Europe/Warsaw') 
>>> loc_dt1 = warsaw.localize(datetime(1915, 8, 4, 23, 59, 59), is_dst=False) 
+2

Je voudrais accrocher une affiche où je travaille lire "la programmation de l'horloge n'est pas trivial!" – Escualo

+0

J'ai testé en utilisant pytz. Le seul problème que je vois est que vous devez connaître la chaîne de fuseau horaire standard afin de définir le fuseau horaire. Cependant, lors de l'exécution de plusieurs O/S, notamment Windows (qui doit avoir la façon la plus étrange de définir le fuseau horaire), et après plusieurs heures de test, ce code snipit était le seul que je pouvais travailler de manière cohérente sur toutes les plateformes. – Steve

+0

mais ceux-ci sont la chaîne standard et il doit y avoir moyen de dire quel fuseau horaire –

Questions connexes