Расчет диапазона месяца не возвращает ожидаемого результата - PullRequest
0 голосов
/ 12 февраля 2019

Если я установлю дату следующим образом:

from datetime import datetime
from dateutil import relativedelta
class count_month_range:
    'Get the month range between 2 specified date based on the timezone'
    def __init__(self, start_date, end_date, timezone):
        self.start_date = start_date
        self.end_date = end_date
        self.timezone = timezone
    def count(self):
        start_date = datetime.strptime(str(self.start_date), '%Y-%m-%dT%H:%M:%S'+self.timezone)
        end_date = datetime.strptime(str(self.end_date), '%Y-%m-%dT%H:%M:%S'+self.timezone)
        r = relativedelta.relativedelta(end_date, start_date)
        print (r.months)
        return r.months
month_range = count_month_range("2018-12-01T00:00:00Z", "2019-12-01T00:00:00Z", "Z")
test = month_range.count()
print(test)

Он вернет неожиданный результат следующим образом:

0
0

Я ожидаю, что он вернется 12

Я пытаюсь получить диапазон месяцев.

Например: 2018-12-01 до 2019-10-31 даст результат 10 месяцев.

У меня есть следующий тест на питоне.py файл:

from datetime import datetime
from dateutil import relativedelta
class count_month_range:
    'Get the month range between 2 specified date based on the timezone'
    def __init__(self, start_date, end_date, timezone):
        self.start_date = start_date
        self.end_date = end_date
        self.timezone = timezone
    def count(self):
        start_date = datetime.strptime(str(self.start_date), '%Y-%m-%dT%H:%M:%S'+self.timezone)
        end_date = datetime.strptime(str(self.end_date), '%Y-%m-%dT%H:%M:%S'+self.timezone)
        r = relativedelta.relativedelta(end_date, start_date)
        print (r.months)
        return r.months
month_range = count_month_range("2018-12-01T00:00:00Z", "2019-10-31T00:00:00Z", "Z")
test = month_range.count()
print(test)

При запуске файла test.py будет возвращено следующее

10
10

И это ожидаемый результат.

Если 2018-12-01 до 2019-10-31 возвращает 10 месяцев, что является правильным, я ожидаю того же правильного расчета при вводе: 2018-12-01 до 2019-12-01.

Такая проблема возникает всякий раз, когда я ввожуодин и тот же месяц в start_date и end_date независимо от года.Что я должен сделать, чтобы все заработало как положено?Ваша помощь очень ценится.

Заранее спасибо.

1 Ответ

0 голосов
/ 12 февраля 2019

Когда вы используете предоставленные тестовые данные, вы получаете относительная дельта (годы = + 1) .Поэтому, когда вы возвращаете объект относительной дельты, вам нужно преобразовать годы в месяцы и суммировать их с месяцами:

total_months = r.years * 12 + r.months

Другой пример.Следующий тест возвращает это: относительная дельта (годы = + 1, месяцы = + 1)

count_month_range("2018-11-01T00:00:00Z", "2019-12-01T00:00:00Z", "Z")
...