需求:拿到指定格式的时间的前一天的时间,如果今天是月初,年初,自动转换,比如:
输入时间是: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