中国(大陆、香港、澳门、台湾)、新加坡、马来西亚、文莱、菲律宾均使用UTC+08:00时间且不实施夏时制。
因此无需pytz库,使用Python标准库即可计算当前时间及日期。
此方法不受系统默认时区的影响。
在时区信息数据库中,Asia/Shanghai代表北京时间(中国标准时间),因为上海是人口最多的城市。
from datetime import datetime
from datetime import timedelta
from datetime import timezone
SHA_TZ = timezone(
timedelta(hours=8),
name='Asia/Shanghai',
)
# 协调世界时
utc_now = datetime.utcnow().replace(tzinfo=timezone.utc)
print(utc_now, utc_now.tzname())
print(utc_now.date(), utc_now.tzname())
# 北京时间
beijing_now = utc_now.astimezone(SHA_TZ)
print(beijing_now, beijing_now.tzname())
print(beijing_now.date(), beijing_now.tzname())
# 系统默认时区
local_now = utc_now.astimezone()
print(local_now, local_now.tzname())
print(local_now.date(), local_now.tzname())
计算结果
2020-05-01 11:31:20.692283+00:00 UTC 2020-05-01 UTC 2020-05-01 19:31:20.692283+08:00 Asia/Shanghai 2020-05-01 Asia/Shanghai 2020-05-01 21:31:20.692283+10:00 AEST 2020-05-01 AEST