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

时间:2019-04-23 23:27:02

标签: python python-3.x

鉴于current_date(),我想获得上个月的20号 我正在尝试使用time.strftime,但无法从中减去该值。

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

这给了我错误。如果我的当前日期是四月,则预期输出为2019-03-20。不知道如何去做。

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

5 个答案:

答案 0 :(得分:4)

constructor(props){
  super(props);
  console.log(props.propName);
}

答案 1 :(得分: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)

答案 2 :(得分: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))

答案 3 :(得分:0)

这将有助于:

from datetime import date, timedelta

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

答案 4 :(得分: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模块。