Python 获取昨天日期(仅用time库)

55次阅读
没有评论

瞎扯

前段时间我在开发 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 的图:

Python

合理在 time.strftime() 接收的第一个参数(字符串类型)使用上图的格式化符号即可。

End

就问你:

如果你是小白:被我秀到了没?

如果你是刚需者:你学废了没?

如果你是大佬:我是不是欠打?

1
灰尘疾客
版权声明:本站原创文章,由 灰尘疾客 2022-09-04发表,共计1526字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
验证码