如何从python中的YYYYMM字符串日期中减去月份?

时间:2019-09-27 18:29:53

标签: python date-formatting

我有一些日期字符串(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字符串。

4 个答案:

答案 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)