如果在python中给出当前日期,如何获取上个月的特定日期?

问题描述 投票:0回答:5

我想得到上个月的20,鉴于current_date()我试图使用time.strftime但不能从中减去它的值。

timestr = time.strftime("%Y-(%m-1)%d")

这给了我错误。如果我的current_date是4月,那么预期的输出是2019-03-20。不确定如何去做。

我阅读了SO的帖子,其中大多数都是为了获得本月的第一天/最后一天。任何帮助,将不胜感激。

python python-3.x
5个回答
4
投票
from datetime import date, timedelta
today = date.today()
last_day_prev_month = today - timedelta(days=today.day)
twenty_prev_month = last_day_prev_month.replace(day=20)
print(twenty_prev_month)  # 2019-03-20

2
投票

使用datetime.replace

import datetime

current_date = datetime.date.today()
new_date = current_date.replace(
  month = current_date.month - 1,
  day = 20
)

print(new_date)
#2019-03-20

编辑

这不适用于Jan,所以这是一个解决方法:

import datetime

current_date = datetime.date(2019, 2, 17)
month = current_date.month - 1
year = current_date.year
if not month:
  month, year = 12, year - 1

new_date = datetime.date(year=year, month=month, day=20)

1
投票

我想这是解析日期的方式。我的理解是,你的代码正在寻找

2019-(03-1)202019-(12-1)15等。

因为%y不是变量,而是关于如何在文本字符串中预期日期的消息,而其他字符应该是预期的,但不处理(如“ - ”)

这似乎完全不是你想要的。我会像平常一样解析日期,然后重新格式化为一个月前:

import datetime
time = datetime.datetime.today()
print(time)
timestr = time.strftime("%Y-%m-%d")
year, month, day = timestr.split("-")
print("{}-{}-{}".format(year, int(month)-1, day))

使用timedelta对象会更容易,但遗憾的是几个月没有,因为它们的长度各不相同。

如果涉及新的一年,要更加强大:

import datetime
time = datetime.datetime.today()
print(time)
timestr = time.strftime("%Y-%m-%d")
year, month, day = timestr.split("-")
if month in [1, "01", "1"]: # I don't remember how January is represented
    print("{}-{}-{}".format(int(year) - 1, 12, day)) # use December of last year
else:
    print("{}-{}-{}".format(year, int(month)-1, day))

0
投票

这将有助于:

from datetime import date, timedelta

dt = date.today() - timedelta(30)// timedelta(days No.)
print('Current Date :',date.today())
print(dt)

0
投票

在传递给time.strftime的字符串中进行数学运算是不可能的,但你可以使用时间模块做一些类似于你所要求的事情。

在Python 3中

# Last month
t = time.gmtime()
print(f"{t.tm_year}-{t.tm_mon-1}-20")

或者在Python 2中

print("{0}-{1}-{2}".format(t.tm_year, t.tm_mon -1, 20))

如果您的约束较少,则可以使用datetime模块。

© www.soinside.com 2019 - 2024. All rights reserved.