记一次python时间格式转换遇到的坑

需求:拿到指定格式的时间的前一天的时间,如果今天是月初,年初,自动转换,比如:
输入时间是:2019-06-27 23:59:59
输出时间是:2019-06-26 23:59:59

之前用datetime需要各种判断月初,年初等条件,后来想到用给的时间的时间戳直接减去86400,然后在转换成指定的格式即可

话不多说,直接上代码:

def get_yesterdayTime(provided_time):
    t_providedTime=time.strptime(provided_time,'%Y-%m-%d%H:%M:%S')
    timeStamp=int(time.mktime(t_providedTime))
    yesterday_stamp=timeStamp-86400
    yesterday=time.strftime('%Y-%m-%d%H:%M:%S',time.gmtime(yesterday_stamp))
    return yesterday

得到的结果让我泪奔,居然是2019-06-26 15:59:59

我在想为啥会时间和预期的会不一样,于是我就把当前时间转换成时间戳然后再转换回格式化的时间

def get_yesterdayTime():
    #获取昨天的timestamp
    yesterday_stamp=int(time.mktime(time.localtime()))-86400
    #获取昨天的timetuple
    yesterday_t=time.gmtime(yesterday_stamp)
    #获取昨天的格式化时间
    yesterday=time.strftime('%Y-%m-%d%H:%M:%S',yesterday_t)
    return yesterday

得出来的时候比当前时间相差8小时,于是乎我开始每一行代码校验,最终发现time.gmtime出现了问题:

gmtime返回的是一个UTC的时间tuple,而我们是东八区,没事还是得多看看源码。。。

修正后如下:

def get_yesterdayTime():
    #获取昨天的timestamp
    yesterday_stamp=int(time.mktime(time.localtime()))-86400+28800
    #获取昨天的timetuple
    yesterday_t=time.gmtime(yesterday_stamp)
    #获取昨天的格式化时间
    yesterday=time.strftime('%Y-%m-%d%H:%M:%S',yesterday_t)
    return yesterday

 

转载于:https://www.cnblogs.com/stevenxu123/p/11112242.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值