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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值