写一个str <=> seconds互转的函数
import datetime as dt
import time as t
def dt_str_to_second_since_1970(time_str,format ="%Y-%m-%d %H:%M:%S"):
dt_time =dt.datetime.strptime(time_str,format)
seconds = t.mktime(dt_time.timetuple())
return seconds
def second_since_1970_to_str_dt(time_seconds,format="%Y-%m-%d %H:%M:%S"):
dt_time = dt.datetime.fromtimestamp(time_seconds)
str_time = dt.datetime.strftime(dt_time,format)
return str_time
def second_since_1970_to_str_dt_v2(time_seconds,format="%Y-%m-%d %H:%M:%S"):
return t.strftime(format, t.localtime(float(time_seconds)))
验算一下:
second_since_1970_to_str_dt(s1)
Out[81]: ‘2006-04-12 16:46:40’
s =‘2006-04-12 16:46:40’
dt_str_to_second_since_1970(s) Out[83]: 1144831600.0
seconds =dt_str_to_second_since_1970(s)
1144831600.0
second_since_1970_to_str_dt(seconds)
‘2006-04-12 16:46:40’second_since_1970_to_str_dt_v2(seconds)
‘2006-04-12 16:46:40’
在秒转化成str时,这两种方法都是可以的。
再看一下性能测试:
%timeit second_since_1970_to_str_dt_v2(time_seconds)
4.58 µs ± 343 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)%timeit second_since_1970_to_str_dt(time_seconds)
5.9 µs ± 423 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
也就是说,v2版本的性能要更优一些。
但是当str=>seconds,换一种其它的写法:
def dt_str_to_second_since_1970_kill(time_str,format ="%Y-%m-%d %H:%M:%S"):
dtime = dt.datetime.strptime(time_str,format)
seconds =(dtime-dt.datetime(1970, 1,1,0, 0, 0,0)).total_seconds()
return seconds
结果会如何?为什么会有差?相差了8个小时,是时间差的原因?
s2=dt_str_to_second_since_1970_v2(“2006-04-12 16:46:40”)
s2 Out[89]: 1144860400.0
s2-seconds Out[90]: 28800.0
28800.0/3600
8.0