時間轉換
python中處理時間的時候,最常用的就是字符形式與時間戳之間的轉換。 把最基本的轉換在這里記下來
string -> timestamp
import time
import dateutil.parser as dateparser
def str_to_timestamp(time_str)
dt = dateparser.parse(time_str)
# OR: dt = time.strptime(datetimestring, fmt)
return time.mktime(dt.timetuple())
datetimestring = 'Fri, 08 Jun 2012 22:40:26 GMT'
str_to_timestamp(datetimestring)
timestamp -> string
import time
def timestamp_to_str(ts, fmt='%Y-%m-%d %H:%M:%S'):
return time.strftime(fmt, time.localtime(timestamp))
timestamp = time.time()
timestamp_to_str(timestamp)
python內置的時間數據結構
python內部使用一個類似於namedtuple的數據結構來存儲時間。 這個數據結構有9個字段,可以用數字下標訪問,也可以用名字訪問。
time.struct_time(
tm_year=2014,
tm_mon=9,
tm_mday=1,
tm_hour=9,
tm_min=0,
tm_sec=0,
tm_wday=0, # 星期幾, 0~6
tm_yday=244, # 本年的第幾天, 1~366
tm_isdst=0 # 是否夏令時
)
Timestamp的備注
這里有一個小細節,就是時間戳都是基於標准時區的,和北京時間有8個小時的時差。 這個時差可以通過time.timezone獲得,即標准時區和本地時區之間相差的秒數。 對於北京時間,這個值是-28800(8*3600)。 所以,當我們通過將時間戳對86400(一天的秒數)取模以獲取從零點開始的秒數的時候, 將存在8個小時的差別。也就是說,
time.mktime(dateparser.parse('2014-09-01 09:00:00').timetuple()) % 86400
將輸出3600, 與上午9點正好差了8個小時。
