Python - 以 YYYY-MM-DD 格式的字符串形式获取昨天的日期



作为API请求的输入,我需要将昨天的日期作为格式为YYYY-MM-DD的字符串。我有一个工作版本,它是:

yesterday = datetime.date.fromordinal(datetime.date.today().toordinal()-1)
report_date = str(yesterday.year) + 
   ('-' if len(str(yesterday.month)) == 2 else '-0') + str(yesterday.month) + 
   ('-' if len(str(yesterday.day)) == 2 else '-0') + str(yesterday.day)

一定有一种更优雅的方式来做到这一点,对教育的兴趣不亚于其他任何事情!

你只需要从今天的日期中减去一天。在Python中,datetime.timedelta对象允许您创建特定的时间跨度作为timedelta对象。

datetime.timedelta(1)给出"一天"的持续时间。并且可以从datetime对象中减去。在减去对象之后,您可以使用datetime.strftime将结果(这是一个日期对象)转换为基于您选择的格式的字符串格式:

>>> from datetime import datetime, timedelta
>>> yesterday = datetime.now() - timedelta(1)
>>> type(yesterday)
>>> datetime.datetime
>>> datetime.strftime(yesterday, '%Y-%m-%d')
'2015-05-26'

注意,除了调用datetime.strftime函数,还可以直接使用datetime对象的strftime方法:

>>> (datetime.now() - timedelta(1)).strftime('%Y-%m-%d')
'2015-05-26'

作为函数:

from datetime import datetime, timedelta

def yesterday(frmt='%Y-%m-%d', string=True):
    yesterday = datetime.now() - timedelta(1)
    if string:
        return yesterday.strftime(frmt)
    return yesterday

的例子:

In [10]: yesterday()
Out[10]: '2022-05-13'
In [11]: yesterday(string=False)
Out[11]: datetime.datetime(2022, 5, 13, 12, 34, 31, 701270)

使用today()方法计算当前日期,然后使用timedelta()减去1的替代答案。其余步骤保持不变。

https://docs.python.org/3.7/library/datetime.html timedelta-objects

from datetime import date, timedelta
today = date.today()
yesterday = today - timedelta(days = 1)
print(today)
print(yesterday)
Output: 
2019-06-14
2019-06-13
>>> import datetime
>>> datetime.date.fromordinal(datetime.date.today().toordinal()-1).strftime("%F")
'2015-05-26'

date对象上调用.isoformat()将得到YYYY-MM-DD

from datetime import date, timedelta
(date.today() - timedelta(1)).isoformat()

我正试图根据这个答案只使用import datetime

import datetime
oneday = datetime.timedelta(days=1)
yesterday = datetime.date.today() - oneday

相关内容

  • 没有找到相关文章