新月开始时的Python日期问题

时间:2018-10-01 11:37:49

标签: python python-3.x date

我对python请求有问题。在此请求中,我需要设置两个日期,今天和昨天。直到今天,在我的整个测试过程中,它一直没有问题。

这里的问题是,我们当然才刚刚开始一个新的月。

我目前正在使用以下日期代码,但是由于我现在已经意识到它们不考虑每月重置。

yesterday = str(datetime.datetime.today().month) + "/" + 
str(datetime.datetime.today().day-1) + "/" + 
str(datetime.datetime.today().year)

today = str(datetime.datetime.today().month) + "/" + 
str(datetime.datetime.today().day) + "/" + 
str(datetime.datetime.today().year)

日期不为0时,应用程序将像超级按钮一样工作。

2 个答案:

答案 0 :(得分:3)

使用datetime.timedelta

例如:

import datetime

today = datetime.datetime.now()
print(today.strftime("%m/%d/%Y"))
yesterday = (today - datetime.timedelta(days=1)).strftime("%m/%d/%Y")
print(yesterday)

输出:

10/01/2018
09/30/2018
  • 使用strftime来获取字符串中所需的日期格式

答案 1 :(得分:3)

您可以使事情变得过于复杂,而不必担心“环绕”等问题。在您的代码中,您用1减去了天数,但是如果我们是月份的第一天(例如 October,1st ),然后从中减去1,即可得出“ October 0th”(十分)。

最好在date对象上执行算术

yesterday_date = datetime.date.today() - datetime.timestamp(days=1)

,然后将其转换为字符串:

yesterday = yesterday_date.strftime('%m/%d/%Y')

在撰写本文时,会生成:

>>> yesterday_date.strftime('%m/%d/%Y')
'09/30/2018'

在打印过程中执行算术会同时赋予“两个职责”,这通常是糟糕的软件设计:这个想法是一个职责