Как вычесть месяцы из строки даты ГГГГММ в питоне? - PullRequest
2 голосов
/ 27 сентября 2019

У меня есть строки, которые представляют собой даты (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)

Это не такработать, но я хотел бы иметь возможность установить переменную «Месяц» для строки, как «201905» и вычислять различные строки ГГГГММ оттуда.

Ответы [ 4 ]

0 голосов
/ 27 сентября 2019

Это решение является простым и надежным .Он использует проверенные временем встроенные пакеты и перенесет вас в предыдущий год, а не просто вычитает (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
0 голосов
/ 27 сентября 2019

Это даст желаемый месяц как 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)
0 голосов
/ 27 сентября 2019

Следующие работы для любого произвольного декремента до 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)
0 голосов
/ 27 сентября 2019

Я использую тот факт, что это строка.Извлеките последние два MM из строки, используя

Месяц [-2:] -> это даст вам диапазон от 01 до 12.

единственное условие, которое вам потребуетсяпроверить, когда это 0. (Я предполагаю, что вы всегда получите действительный ГГГГММ.

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))
...