Display the time in a different time zone
是否有一种优雅的方式在另一个时区显示当前时间?
我想要一些具有以下精神的东西:
1 2 3 4 | cur = <Get the current time, perhaps datetime.datetime.now()> print("Local time {}".format(cur)) print("Pacific time {}".format(<something like cur.tz('PST')>)) print("Israeli time {}".format(<something like cur.tz('IST')>)) |
一个更简单的方法:
1 2 3 4 5 6 | 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') |
您可以使用pytz库:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | >>> 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' |
通过C库的时区设置的一种方法是
1 2 3 4 5 6 7 8 | >>> 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 2 3 4 5 6 7 | 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') |
这个脚本使用了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #!/usr/bin/env python3 import pytz from datetime import datetime, timezone utc_dt = datetime.now(timezone.utc) PST = pytz.timezone('US/Pacific') IST = pytz.timezone('Asia/Jerusalem') print("UTC time {}".format(utc_dt.isoformat())) print("Local time {}".format(utc_dt.astimezone().isoformat())) print("Pacific time {}".format(utc_dt.astimezone(PST).isoformat())) print("Israeli time {}".format(utc_dt.astimezone(IST).isoformat())) |
它的输出如下:
1 2 3 4 5 | $ ./timezones.py UTC time 2019-02-23T01:09:51.452247+00:00 Local time 2019-02-23T14:09:51.452247+13:00 Pacific time 2019-02-22T17:09:51.452247-08:00 Israeli time 2019-02-23T03:09:51.452247+02:00 |
你可以检查一下这个问题。
或者尝试使用pytz。在这里,您可以找到一个安装指南和一些使用示例。
我需要时间信息的所有时间,所以我有这个整洁的。py脚本在我的服务器上,让我只是选择和取消选择我想显示的时区的顺序东->西。
它是这样打印的:
1 2 3 4 5 6 7 8 9 | 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 |
这里的源代码是一个。py文件在我的github这里:https://github.com/SpiRaiL/timezone或直接文件连结:https://raw.githubusercontent.com/SpiRaiL/timezone/master/timezone.py
文件中的列表如下:在你要打印的地方打个"p"就行了。如果你想要特别标记的话,在你自己的时区加一个"h"。
1 2 3 4 5 6 7 8 9 | (' ','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'), |