月份范围计算未达到 Return 预期结果
Month Range Calculation Doesn't Return Expected Result
如果我将日期设置为:
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)
它将return意想不到的结果如下:
0
0
期待return12
我正在尝试获取月份范围。
例如:2018-12-01 到 2019-10-31 会给我 10 个月的结果。
我有以下 python test.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文件
时会return如下
10
10
这是预期的结果。
如果 2018-12-01 到 2019-10-31 returns 10 个月是正确的,我希望在输入时同样正确计算:
2018-12-01 至 2019-12-01.
每当我在 start_date 和 end_date 中输入相同的月份时,就会出现这种问题,而与不同的年份无关。
我应该怎么做才能使其按预期工作?
非常感谢您的帮助。
提前致谢。
当您使用提供的测试数据时,您会得到 relativedelta(years=+1)。
因此,当您返回 relativedelta 对象时,您需要将年份转换为月份并将其与月份相加:
total_months = r.years * 12 + r.months
再举个例子。下面测试returns这个:relativedelta(years=+1, months=+1)
count_month_range("2018-11-01T00:00:00Z", "2019-12-01T00:00:00Z", "Z")
如果我将日期设置为:
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)
它将return意想不到的结果如下:
0
0
期待return12
我正在尝试获取月份范围。
例如:2018-12-01 到 2019-10-31 会给我 10 个月的结果。
我有以下 python test.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文件
时会return如下10
10
这是预期的结果。
如果 2018-12-01 到 2019-10-31 returns 10 个月是正确的,我希望在输入时同样正确计算: 2018-12-01 至 2019-12-01.
每当我在 start_date 和 end_date 中输入相同的月份时,就会出现这种问题,而与不同的年份无关。 我应该怎么做才能使其按预期工作? 非常感谢您的帮助。
提前致谢。
当您使用提供的测试数据时,您会得到 relativedelta(years=+1)。 因此,当您返回 relativedelta 对象时,您需要将年份转换为月份并将其与月份相加:
total_months = r.years * 12 + r.months
再举个例子。下面测试returns这个:relativedelta(years=+1, months=+1)
count_month_range("2018-11-01T00:00:00Z", "2019-12-01T00:00:00Z", "Z")