我想得到上个月的20,鉴于current_date()
我试图使用time.strftime
但不能从中减去它的值。
timestr = time.strftime("%Y-(%m-1)%d")
这给了我错误。如果我的current_date是4月,那么预期的输出是2019-03-20
。不确定如何去做。
我阅读了SO的帖子,其中大多数都是为了获得本月的第一天/最后一天。任何帮助,将不胜感激。
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
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)
我想这是解析日期的方式。我的理解是,你的代码正在寻找
2019-(03-1)20
或2019-(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))
这将有助于:
from datetime import date, timedelta
dt = date.today() - timedelta(30)// timedelta(days No.)
print('Current Date :',date.today())
print(dt)
在传递给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
模块。