作为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