python的时间格式化,默认是走的系统时区,如果是做国际化应用,此时就会遇到一个问题了,机器可能分布于全球各地,有可能不同的机器会有不同的默认时区,此时就需要指定时区了。
python本来有一个时区相关的模块为datetime.timezone,它是用来描述固定偏移的时区(Fixed offset from UTC implementation of tzinfo),通常情况下它就够用:
tz = datetime.timezone(timedelta(hours=8))
datetime.datetime.now(tz)
但是有一些国家和地区,时差是变化的,比如有夏令时、冬令时之类,pytz库用于解决这个问题:
datetime.datetime.now(pytz.timezone('America/New_York'))
同时,pytz的使用也更简洁些,以下两种写法等效,都是UTC+0的时间:
import pytz
import datetime
datetime.datetime.now(tz=pytz.utc)
datetime.datetime.now(tz=pytz.timezone('UTC'))
如果是北京时间,即UTC+8的时间:
datetime.datetime.now(tz=pytz.timezone('Asia/Shanghai'))
datetime.datetime.now(tz=pytz.FixedOffset(8 * 60))
注意:pytz.FixedOffset传入的单位是分钟。
库里所支持区域位置,可以通过如下列表来找:
list(pytz.country_timezones.items())
带时区的时间解析:
datetime.strptime('2021-02-02 00:00:00 +0800', '%Y-%m-%d %H:%M:%S %z')