我有一些日期字符串(YYYYMM
,例如:201909
。
在Python中,如何简单地减去一个月?
from datetime import datetime
Month = '201905'
Month = datetime.strptime(Month, '%Y%m').date()
Month1 = str(Month -1)
Month2 = str(Month -2)
Month3 = str(Month -3)
Month6 = str(Month -6)
Month12 = str(Month - 100)
这不起作用,但是我希望能够将'Month'变量设置为类似'201905'的字符串,并从那里计算各种YYYYMM字符串。
答案 0 :(得分:0)
我正在利用它是字符串的事实。 使用
从字符串中提取最后两个MM月[-2:]->这将给您01-12范围。
您唯一需要检查的条件是当它为0时(我假设您将始终获得有效的YYYYMM。
Month = '201912'
month = 12 if (int(Month[-2:]) -1 ) % 12 == 0 else (int(Month[-2:]) -1 ) % 12
year = int(Month[:-2]) - 1 if month == 12 else int(Month[:-2])
print (str(year)+str(month))
答案 1 :(得分:0)
以下内容适用于任意递减的情况,最长12个月
old_date_string = '201901'
decrement = 1
year = int(old_date_string[:-2])
month = int(old_date_string[-2:])
month = month - decrement
if month<1:
month = month + 12
year = year - 1
new_date_string = str(year) + '{:02d}'.format(month)
print(new_date_string)
答案 2 :(得分:0)
该解决方案既简单又健壮。它使用了经过时间检验的内置程序包,它将带您进入上一年,而不仅仅是从月份数中减去(n)。
from datetime import datetime as dt
from dateutil.relativedelta import relativedelta
# User's original values.
string = '201905'
dte = dt.strptime(string, '%Y%m').date()
# Calculate one months previous.
result = dte + relativedelta(months=-1)
# Display path and results
print('Original string value: {}'.format(string))
print('Original datetime value: {}'.format(dte))
print('Result (original minus two months): {}'.format(result))
输出:
Original string value: 201905
Original datetime value: 2019-05-01
Result (original minus one month): 2019-04-01
答案 3 :(得分:-2)
这将使所需月份为int
:
Month = '201905'
Month = datetime.strptime(Month, '%Y%m').date()
month = Month.month # this is an int, you can easily subtract it
print (Month.month)