從mongodb中讀取出來的記錄中,時間存儲在datetime對象里,返回給客戶端的卻要求是時間戳格式,因此需要將對應的datetime時間轉化為時間戳,從stackoverflow上找到同樣的問題和詳盡的答案:
https://stackoverflow.com/questions/8777753/converting-datetime-date-to-utc-timestamp-in-python
如下以2012年12月12日12分12秒為例,求其時間戳
1,如果是Python3.3及以上版本:
可以直接調用新函數: datetime.timestamp:
>>> dt = datetime.datetime(2012, 12, 12, 12, 12, 12) >>> dt.replace(tzinfo=datetime.timezone.utc).timestamp() 1355314332.0
第一種方法必須指定tzinfo為utc時區,否則計算時會將當前時區(中國為UTC+8)和UTC的時間差換算后計算時間戳,導致得出的timestamp比UTC要快或者慢 n*3600秒(比如為中國時區則會慢8*3600s)
2,如果是Python3<Python3.3之間的版本:
>>> ep = datetime.datetime(1970, 1, 1) >>> dt = datetime.datetime(2012, 12, 12, 12, 12, 12) >>> (dt - ep)/datetime.timedelta(seconds=1) 1355314332.0
3,如果是Python2:
>>> ep = datetime.datetime(1970, 1, 1) >>> dt = datetime.datetime(2012, 12, 12, 12, 12, 12) >>> (dt - ep).total_seconds() 1355314332.0
第2、3種方法的原理,其實就是直接拿記錄時間的datetime對象,減去代表1970年1月1日0時0分0秒(此時刻時間戳為0)的datetime,得到一個timedelta,再將其換算成秒數即為時間戳,只要保證ep和dt位於一個時區,計算結果就會相同,因而不需要特別指定utc時區。