【问题标题】:Python - Get Yesterday's date as a string in YYYY-MM-DD formatPython - 以 YYYY-MM-DD 格式获取昨天的日期作为字符串
【发布时间】: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)

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

【问题讨论】:

标签: python python-2.7 python-3.x date datetime


【解决方案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 answerimport datetime

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

      【讨论】:

        猜你喜欢
        • 2013-05-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-09
        • 2019-03-11
        • 1970-01-01
        • 2018-07-31
        • 1970-01-01
        相关资源
        最近更新 更多