资讯专栏INFORMATION COLUMN

pytz-时区相关模块

LucasTwilight / 2699人阅读

摘要:最近开发过程中遇到这样一个问题在使用模块获取当前时间之后与程序中某些时间操作会报错这个我就有点纳闷了怎么会报这个错误呢然后我开始搜资料原来在有两种时间类型和没有表明时区的时间如有时区的时间如可以发现类型时间在打印对象信息时多了一个没错这

最近开发过程中遇到这样一个问题:

在使用datetime模块获取当前时间之后,与程序中某些时间操作会报错:
TypeError: can"t subtract offset-naive and offset-aware datetimes

这个我就有点纳闷了,怎么会报这个错误呢?然后我开始搜资料,原来在有两种时间类型:naiveaware

naive

没有表明时区的时间.如: datetime.datetime.now()

  datetime.datetime(2019, 7, 8, 14, 13, 52, 534690)

aware

有时区的时间.如:datetime.datetime.now(pytz.utc)

  datetime.datetime(2019, 7, 8, 6, 22, 16, 245504, tzinfo=)

可以发现aware类型时间在打印对象信息时多了一个tzinfo,没错,这个就是用来标识时区的.而因为我们获取当前的时候没有传入时区,为naive类型,所以与有些aware时间操作会发生异常,其实解决方法也很简单,将naive转化为aware类型就好了,怎样转化呢?我找到了这几种方式:

方式一
datetime.datetime.now().replace(tzinfo=pytz.utc)
方式二
datetime.datetime.now(pytz.utc)
方式三
pytz.utc.localize(datetime.datetime.now())

而第二种生成方式是在创建时间的时候指定时间,其他两种可以用来转化/修改时区.写了这么多,你们肯定在疑惑一个东西:pytz
这是一个时区模块,用来在python中进行一个时区的相关操作.其提供的对象方法为

__all__ = [
    "timezone", "utc", "country_timezones", "country_names",
    "AmbiguousTimeError", "InvalidTimeError",
    "NonExistentTimeError", "UnknownTimeZoneError",
    "all_timezones", "all_timezones_set",
    "common_timezones", "common_timezones_set",
]

接下来我们一个个介绍:

timezone:传入一个时区,如:Asia/Shanghai,返回一个时区对象

pytz.timezone("Asia/Shanghai")
>>> 

utc: 返回一个utc时区对象

pytz.utc
>>> 

country_timezones:传入一个国家英文缩写,返回拥有的时区,如:中国("CN"),不传则返回由247个国家缩写为key,时区为值的dict

pytz.country_timezones("CN")
>>> [u"Asia/Shanghai", u"Asia/Urumqi"]

country_names:拿一个国家英文缩写,返回国家完整英文名称

pytz.country_names["CN"]
>>>  u"China"

all_timezones:所有时区的列表(591个)

pytz.all_timezones
>>>  ["Asia/Shanghai", "Asia/Urumqi", ...] # 有591个,所以还是列一下咱们国家的时区

all_timezones_set:所有时区的集合

pytz.all_timezones_set
>>>  {"Asia/Shanghai", "Asia/Urumqi", ...}

common_timezones:常用的时区列表(439个)

pytz.common_timezones
>>>  ["Asia/Shanghai", "Asia/Urumqi", ...] # 有439个

common_timezones_set:常用的时区集合

pytz.common_timezones
>>>  {"Asia/Shanghai", "Asia/Urumqi", ...}

AmbiguousTimeError:模糊时间错误

InvalidTimeError:无效时间错误

NonExistentTimeError:不存在的时间错误

UnknownTimeZoneError:未知的时区错误

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/45113.html

相关文章

  • 解决树莓派下载django的TypeError:..... Retry and int 问题

    摘要:没报错但依然无法安装使用再次安装无果感谢大神的分享我才发觉这是一个新手的通用问题树莓派自带的系统附带了一个来自前寒武纪的版本,如果您不想花费数小时来调试与相关的问题,那么就必须升级它。 诸位, 不好意思哈, 请允许我把完整的标题写完(标题不能超过64个有效字符): 记一次解决树莓派下载Django库 ——报错为TypeError: unsupported operand types f...

    TalkingData 评论0 收藏0
  • Python 3,一行代码处理各种时间转换,从此跟datetime,time模块说拜拜 ~ ~ 不收

    摘要:代码实例的时间的时间输出和相差的时长输出结果也就是说,多伦多和温哥华有个小时的时差小屌丝我去这么牛嘛小鱼这是开胃菜。代码实例为了显示直观,我直接用来运行这没有什么难度,在前面的代码中,也有展示。 ...

    yy13818512006 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<