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

Posted

技术标签:

【中文标题】Python - 以 YYYY-MM-DD 格式获取昨天的日期作为字符串【英文标题】:Python - Get Yesterday's date as a string in YYYY-MM-DD format 【发布时间】:2015-08-09 15:04:51 【问题描述】:

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

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

【问题讨论】:

你可以看这个:***.com/questions/1712116/… 修改格式字符串就行了 【参考方案1】:

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

datetime.timedelta(1) 为您提供“一天”的持续时间,并且可以从datetime 对象中减去。减去对象后,您可以使用datetime.strftime 将结果(日期对象)转换为基于format of choice 的字符串格式:

>>> 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'

作为一个函数:

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

【讨论】:

TypeError: strftime() 最多接受 1 个参数(给定 2 个) 代替strftime,也可以使用isoformat()【参考方案2】:

另一种答案是使用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

【讨论】:

这个答案具有误导性。请注意,您仍然必须将日期对象转换为字符串。 print 函数自动以该格式打印日期,但这并不意味着对象是字符串并以这种方式格式化!【参考方案3】:
>>> import datetime
>>> datetime.date.fromordinal(datetime.date.today().toordinal()-1).strftime("%F")
'2015-05-26'

【讨论】:

【参考方案4】:

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

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

【讨论】:

【参考方案5】:

我正在尝试仅使用基于this answer 的import datetime

import datetime

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

【讨论】:

以上是关于Python - 以 YYYY-MM-DD 格式获取昨天的日期作为字符串的主要内容,如果未能解决你的问题,请参考以下文章

以 yyyy-mm-dd 格式获取上个月的最后一天

在 Python 中以 YYYY-MM-DD 获取今天的日期?

PHP:以YYYY-MM-DD格式获取两个日期之间的天数[重复]

pyspark:如何以“yyyy-MM-dd HH”格式按日期列分区

将python中索引的日期格式从yyyy-dd-mm更改为yyyy-mm-dd

在 Python 中增加日期字符串 YYYY-MM-DD 的最快方法是啥?