一日一技:推特时间的格式化方案
在使用推特开放API获取推文的时候,会发现推文的发布时间是下面这样的:
1 | { |
现在我想把它转换为2019-12-24 18:51:15
的形式,应该如何操作呢?
可能有同学会按照下面这个逻辑来处理:
- 首先,使用空格把这个时间字符串切分开变成
['Tue', 'Dec', '24', '10:51:15', '+0000', '2019']
- 第0项是星期,不需要,直接丢弃
- 第1项是月份,通过一个英文月份简称到月份数字的字典,把
Dec
映射为12
- 第2项是日期,不做修改
- 第3项是时分秒,不做修改
- 第4项是时区,说明这个时间是采用的0时区,比北京时间晚8小时
- 第5项是年份,不做修改
- 把修改过的第1项、第2项、第3项、第5项调整顺序,拼接成一个符合要求的时间:
2019-12-24 10:51:15
。把使用datetime.datetime.strptime
转成datetime.datetime
对象。 - 把这个
datetime.datetime
对象加上datetime.timedelta(hours=8)
- 使用
strftime
方法再把datetime.datetime
对象转回字符串
整个过程看起来非常麻烦。
实际上,我们有更简单的办法来处理。Tue Dec 24 10:51:15 +0000 2019
对应的时间格式为%a %b %d %H:%M:%S %z %Y
;对于一个datetime.datetime
对象,我们可以调用它的astimezone
方法把时区移除,移除以后就会变成当地时间。
完整代码如下:
1 | 'Wed Dec 25 09:09:25 +0000 2019' dt = |
运行效果如下图所示: