2009-09-09 11 views
31

Existe-t-il un moyen élégant d'afficher l'heure dans un autre fuseau horaire?Python: affiche l'heure dans un fuseau horaire différent

Je voudrais avoir quelque chose à l'esprit général de:

cur=<Get the current time, perhaps datetime.datetime.now()> 
print "Local time ", cur 
print "Pacific time ", <something like cur.tz('PST')> 
print "Israeli time ", <something like cur.tz('IST')> 

Toutes les idées?

+0

Reproduction exacte: http://stackoverflow.com/questions/117514/how-do-i-use-timezones-with-a-datetime-object-in-python –

+0

Merci. Je ne l'ai pas trouvé quand j'ai cherché le sujet. –

Répondre

38

Vous pouvez utiliser la bibliothèque pytz:

>>> from datetime import datetime 
>>> import pytz 
>>> utc = pytz.utc 
>>> utc.zone 
'UTC' 
>>> eastern = pytz.timezone('US/Eastern') 
>>> eastern.zone 
'US/Eastern' 
>>> amsterdam = pytz.timezone('Europe/Amsterdam') 
>>> fmt = '%Y-%m-%d %H:%M:%S %Z%z' 

>>> loc_dt = eastern.localize(datetime(2002, 10, 27, 6, 0, 0)) 
>>> print loc_dt.strftime(fmt) 
2002-10-27 06:00:00 EST-0500 

>>> ams_dt = loc_dt.astimezone(amsterdam) 
>>> ams_dt.strftime(fmt) 
'2002-10-27 12:00:00 CET+0100' 
+0

+1 Exactement ce dont j'avais besoin, merci! –

+1

Pour la partie 'heure actuelle' de la question, vous pouvez commencer par 'loc_dt = pytz.utc.localize (datetime.utcnow())' à la place d'une constante – patricksurry

0

Vous pouvez vérifier this question.

Ou essayez d'utiliser pytz. Vous trouverez ici un guide d'installation avec quelques exemples d'utilisation.

7

Une façon, par le paramètre de fuseau horaire de la bibliothèque C, est

>>> cur=time.time() 
>>> os.environ["TZ"]="US/Pacific" 
>>> time.tzset() 
>>> time.strftime("%T %Z", time.localtime(cur)) 
'03:09:51 PDT' 
>>> os.environ["TZ"]="GMT" 
>>> time.strftime("%T %Z", time.localtime(cur)) 
'10:09:51 GMT' 
+1

Cela ne fonctionne que sous Unix selon la documentation. Je ne sais pas si cela fait une différence ici. –

+1

J'avais besoin d'une solution qui n'utilise pas pytz et ne doit fonctionner que sur les systèmes Linux, donc c'est parfait – Xandaros

+0

Celui-ci fonctionne parfaitement dans AWS Lambda sans pytz. Merci beaucoup. – sid8491

73

Une méthode plus simple:

from datetime import datetime 
from pytz import timezone  

south_africa = timezone('Africa/Johannesburg') 
sa_time = datetime.now(south_africa) 
print sa_time.strftime('%Y-%m-%d_%H-%M-%S') 
+1

oui, beaucoup plus propre version! – oDDsKooL

2

Ceci est ma mise en œuvre:

from datetime import datetime 
from pytz import timezone 

def local_time(zone='Asia/Jerusalem'): 
    other_zone = timezone(zone) 
    other_zone_time = datetime.now(other_zone) 
    return other_zone_time.strftime('%T') 
+0

pas différent du précédent. seule fonction formatée et look plus propre. Je vais l'ajouter comme commentaire. oh ... je ne peux pas commenter. – OLS

-1

Je besoin de temps info tout le temps, donc j'ai ce script .py sur mon serveur qui me permet de sélectionner et de désélectionner les fuseaux horaires ant à afficher dans l'ordre d'est-> ouest.

Il imprime comme ceci:

Australia/Sydney : 2016-02-09 03:52:29 AEDT+1100 
Asia/Singapore  : 2016-02-09 00:52:29 SGT+0800 
Asia/Hong_Kong  : 2016-02-09 00:52:29 HKT+0800 
EET     : 2016-02-08 18:52:29 EET+0200 
CET     : 2016-02-08 17:52:29 CET+0100  <- you are HERE 
UTC     : 2016-02-08 16:52:29 UTC+0000 
Europe/London  : 2016-02-08 16:52:29 GMT+0000 
America/New_York : 2016-02-08 11:52:29 EST-0500 
America/Los_Angeles : 2016-02-08 08:52:29 PST-0800 

Voici le code source est un fichier .py sur mon github ici: https://github.com/SpiRaiL/timezone Ou le lien de fichier direct: https://raw.githubusercontent.com/SpiRaiL/timezone/master/timezone.py

Dans le fichier est une liste comme ceci: Il suffit de mettre un «p» dans les endroits que vous voulez imprimer. Mettez un «h» pour votre propre fuseau horaire si vous le souhaitez spécialement marqué.

(' ','America/Adak'),        (' ','Africa/Abidjan'),        (' ','Atlantic/Azores'),       (' ','GB'), 
(' ','America/Anchorage'),       (' ','Africa/Accra'),        (' ','Atlantic/Bermuda'),       (' ','GB-Eire'), 
(' ','America/Anguilla'),       (' ','Africa/Addis_Ababa'),       (' ','Atlantic/Canary'),       (' ','GMT'), 
(' ','America/Antigua'),       (' ','Africa/Algiers'),        (' ','Atlantic/Cape_Verde'),      (' ','GMT+0'), 
(' ','America/Araguaina'),       (' ','Africa/Asmara'),        (' ','Atlantic/Faeroe'),       (' ','GMT-0'), 
(' ','America/Argentina/Buenos_Aires'),    (' ','Africa/Asmera'),        (' ','Atlantic/Faroe'),        (' ','GMT0'), 
(' ','America/Argentina/Catamarca'),    (' ','Africa/Bamako'),        (' ','Atlantic/Jan_Mayen'),       (' ','Greenwich'), 
(' ','America/Argentina/ComodRivadavia'),   (' ','Africa/Bangui'),        (' ','Atlantic/Madeira'),       (' ','HST'), 
(' ','America/Argentina/Cordoba'),     (' ','Africa/Banjul'),        (' ','Atlantic/Reykjavik'),       (' ','Hongkong'), 
Questions connexes