Python: str、datetime、time、seconds

写一个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

发布了285 篇原创文章 · 获赞 341 · 访问量 169万+

猜你喜欢

转载自blog.csdn.net/wowotuo/article/details/101837056