一日一技:推特時間的格式化方案
- 2019 年 12 月 27 日
- 筆記

攝影:產品經理
產品經理煮的熱紅酒
在使用推特開放API獲取推文的時候,會發現推文的發布時間是下面這樣的:
{ ... "created_at": "Tue Dec 24 10:51:15 +0000 2019", ... }
現在我想把它轉換為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
方法把時區移除,移除以後就會變成當地時間。
完整程式碼如下:
>>> dt = 'Wed Dec 25 09:09:25 +0000 2019' >>> dt_obj = datetime.datetime.strptime(dt, '%a %b %d %H:%M:%S %z %Y') >>> dt_obj.astimezone(tz=None).strftime('%Y-%m-%d %H:%M:%S') '2019-12-25 17:09:25'
運行效果如下圖所示:

