记一次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

猜你喜欢

转载自www.cnblogs.com/stevenxu123/p/11112242.html