2011年12月23日 星期五

[python]datetime

從 javascript 的 datetime 的 timestamp 了解到,
python 無法直接獲得 timestamp 的值。
一般來說這個 timestamp 指的是Unix epoch (or Unix time or POSIX time or Unix timestamp)
根據這裡提到,也許是 datetime 的表示法有很多種,且精準度高於 timestamp,
所以就沒有直接提供方法。

但是也不是沒辦法。

在得到一個 datetime object 後

import datetime
x = datetime.datetime.now()

# datetime.datetime(2011, 12, 23, 17, 17, 58, 625000)

第一種是藉 calendar 模組

>>> import calendar
>>> calendar.timegm(x.timetuple())
1324660678

這是得到標準時區的 timestamp,所以要轉回原來時區(local)的時間,不能用 fromtimestamp,
而是要用 utcfromtimestamp

>>> y = calendar.timegm(x.timetuple())
>>> z = datetime.datetime.fromtimestamp(y)
>>> z
datetime.datetime(2011, 12, 24, 1, 17, 58)
>>> y = calendar.timegm(x.timetuple())
>>> z = datetime.datetime.utcfromtimestamp(y)
>>> z
datetime.datetime(2011, 12, 23, 17, 17, 58)

另一個方法是用 time 模組,產生出來的 timestamp 就長不一樣。
這個用 fromtimestamp 就可以得到local datetime。

>>> import time
>>> y = time.mktime(x.timetuple())
>>> y
1324631878.0
>>> z = datetime.datetime.fromtimestamp(y)
>>> z
datetime.datetime(2011, 12, 23, 17, 17, 58)

這裡有個貼心的網站,幫你整理各語言如何得到 timestamp。
http://www.epochconverter.com/

在寫程式時一定要先測試一下數值是否如你所想喔

沒有留言:

張貼留言