2016年11月9日 星期三

[python] datetime string with timezone to timestamp 轉換有時區的時間字串到時間戳



有個需求是把 時間字串轉成 epoch 的 timestamp

這個字串來說 "2016-11-07 15:47:33" UTC+8
轉換成 iso 8601 表示的話

2016-11-07T15:47:33+08:00

轉成 timestamp就是  1478504853


int((datetime.strptime(t, "%Y-%m-%d %H:%M:%S") - timedelta(hours=8)).strftime("%s")) - time.timezone

不使用其他lib的思路如下,先把 time string parse成 datetime object ,
但是因為UTC +8 跟 UTC 差了八個小時 ,所以減去 timedelta 八小時 ,就是UTC 的datetime string 。

是使用 strftime 轉成 timestamp 時,會因為環境的timezone設定有影響, 會以為這個 datetime object 是 目前的 timezone 所以,再減掉 time.timezone。
就得到最後的 timestamp。


>>> t
'2016-11-08 11:50:21'
>>> int((datetime.strptime(t, "%Y-%m-%d %H:%M:%S") - timedelta(hours=8)).strftime("%s")) - time.timezone
1478577021
>>> time.timezone
-28800



另外一個使用 pytz 的作法


import pytz
from datetime import datetime,timedelta

tp_timezone = pytz.timezone('Asia/Taipei')
tsd = datetime.strptime(t, "%Y-%m-%d %H:%M:%S").replace(tzinfo=tp_timezone)
timestamp = int(tsd.strftime("%s"))





沒有留言:

張貼留言