一日一技:推特時間的格式化方案

  • 2019 年 12 月 27 日
  • 筆記

攝影:產品經理

產品經理煮的熱紅酒

在使用推特開放API獲取推文的時候,會發現推文的發布時間是下面這樣的:

{      ...      "created_at": "Tue Dec 24 10:51:15 +0000 2019",      ...  }  

現在我想把它轉換為2019-12-24 18:51:15的形式,應該如何操作呢?

可能有同學會按照下面這個邏輯來處理:

  1. 首先,使用空格把這個時間字元串切分開變成['Tue', 'Dec', '24', '10:51:15', '+0000', '2019']
  2. 第0項是星期,不需要,直接丟棄
  3. 第1項是月份,通過一個英文月份簡稱到月份數字的字典,把Dec映射為12
  4. 第2項是日期,不做修改
  5. 第3項是時分秒,不做修改
  6. 第4項是時區,說明這個時間是採用的0時區,比北京時間晚8小時
  7. 第5項是年份,不做修改
  8. 把修改過的第1項、第2項、第3項、第5項調整順序,拼接成一個符合要求的時間:2019-12-24 10:51:15。把使用datetime.datetime.strptime轉成datetime.datetime對象。
  9. 把這個datetime.datetime對象加上datetime.timedelta(hours=8)
  10. 使用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'  

運行效果如下圖所示: