Python 获取昨天日期(仅用time库)
瞎扯
前段时间我在开发 EEChat ——一套以邮箱为载体的加密聊天软件,需要对日期进行处理(以便处理最近以及最新消息相关功能),其中,我用到了一个 Python 自带的库 time
。
中途遇到这么一个问题:如何获取昨天的日期?
这个问题看似简单,好像也很好处理,但是其实要让机器来做,有点费正常人的头发。
我一开始想到:获取当前日期,然后将 year-month-day
中的 day
减一就可以。
但是很快,我就发现这个方法的不可行:首先这样搞的话如果 day 是 1,那么昨天的 day 是啥?按理说一个月的第一天前一天正常是 31/30/29/28 号,但是要是按上面的逻辑来应该是 0 号……
然后你还不能直接按 31 或 30 天来处理,除非逐个按月份判断……然后等到处理到 1 月 1 号后还得考虑年份更改,这个时候还有闰年平年的区分……所有的事情要通过各种判断和循环手动写出来,简单的操作要几十行的代码是既费脑费手还费内存……
那么有没有通过标准方法实现的办法呢?有!
实现
谜之挣扎
我尝试上网搜索相关文档、文章,但是反馈较少,且都需要导入其它库(如 datetime
)来实现,这显然很不符合我的办事风格(能简尽简,俗称『懒』),我花了好几天在想如何只用 time 模块实现,无奈没有现成相关的方法(Method)可用。
思想的突破
某天早上醒来,在回忆我是谁的时候突然想到了可以这样搞(不得不感叹真是『一天之计在于晨』):获取当前时间戳减去一天的秒数再重新格式化成明文时间。
这么说小白可能还是不太懂,下面配合代码做粗略的讲解:
秀操作
首先我们需要获取当前时间戳,由于使用 time 库,所以按照其方法,获取当前时间戳:
什么是时间戳
时间戳是指格林威治时间(世界时) 1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒) 起至现在的总秒数。
你大可不必考虑获取到的结果是否存在 8 小时的时间差(除非你的计算机时间是错误的),因为 time 模块默认当地时间。
# 写文章的时间是2022年9月4日20点10分
nowtime = time.time()
# 1662293458.848024
获取到时间戳有什么用?前面说到了,time 模块没有开箱即用的获取非今天日期的方法,所以我们需要获取到时间戳,然后减去一天的秒数(最保险),后面再重新格式化:
# 计算昨天此时的时间戳
yesterday_nowtime = nowtime - 24 * 60 * 60
# 下面这样也是可行的:
yesterday_nowtime = nowtime - 86400
将秒转换为当地时间的时间元组:
timeArray = time.localtime(yesterday_nowtime)
# 内容大概长这样:time.struct_time(tm_year=2022, tm_mon=9, tm_mday=3, tm_hour=20, tm_min=30, tm_sec=34, tm_wday=5, tm_yday=246, tm_isdst=0)
这个时候我们可以用 time.strftime
接收时间元组并返回格式化的可读时间:
formattime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
print(formattime)
# '2022-09-03 20:10:58'
上面注释就是运行结果,可以说非常准。连时间都拿到了,还愁日期的事?还愁后天、大前天、大后天的日期??
关于如何自行指定输出时间格式
引用一张来自 CSDN 的图:
合理在
time.strftime()
接收的第一个参数(字符串类型)使用上图的格式化符号即可。
End
就问你:
如果你是小白:被我秀到了没?
如果你是刚需者:你学废了没?
如果你是大佬:我是不是欠打?
共有 0 条评论