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

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

推荐答案

你只需要从今天的日期中减go 一天.在Python datetime.timedelta中,对象可以创建特定的时间跨度,即timedelta object.

datetime.timedelta(1)表示"一天"的持续时间,可以从datetime对象中减go .减go 对象后,可以使用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

Python-3.x相关问答推荐

CONNEXION.EXCEPTIONS.ResolverError:运行pyz文件时未命名模块

Python:字典和列表:在列表字典中搜索子列表的有效方法

在循环访问XML中的多个层时,xml.etree.Elementree Python3解析器不起作用

将f-字符串放置在f-字符串内

以编程方式关闭jupyterlab内核

当条件第一次出现时将行标记为True,如果按顺序重复则标记为False

Python中提取每个组/ID所属特定列中的自然数

Pandas 窗口聚合两个排序表

在 python pandas 中设置条件和分配新值

如何从形状汇总图中提取实际值

Python多进程:运行一个类的多个实例,将所有子进程保留在内存中

运行 pip install -r requirements.txt 时出错

如何从字典中打印特定键值?

在没有时间的python中创建日期

使用 python2 和 python3 创建一个 virtualenv

警告:请使用 tensorflow/models 中的官方/mnist/dataset.py 等替代方案

如何在 Python 3.2 中退出?

将 Python SIGINT 重置为默认信号处理程序

在 Python 中生成马尔可夫转移矩阵

如何更改 tkinter 文本小部件中某些单词的 colored颜色 ?