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)

必须有一种更优雅的方式来做到这一点,对教育目的和其他任何事情一样感兴趣!

原文由 Jacob 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

您只需要从今天的日期中减去一天。在 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)

原文由 Mazdak 发布,翻译遵循 CC BY-SA 4.0 许可协议

另一种答案是使用 today() 方法计算当前日期,然后使用 timedelta() 减去一个。其余步骤保持不变。

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

原文由 theRahulMody 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题