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 格式获取昨天的日期作为字符串的主要内容,如果未能解决你的问题,请参考以下文章
在 Python 中以 YYYY-MM-DD 获取今天的日期?
PHP:以YYYY-MM-DD格式获取两个日期之间的天数[重复]
pyspark:如何以“yyyy-MM-dd HH”格式按日期列分区