簡體   English   中英

根據 dateutil.relativedelta 大於指定時間量的比較將月份添加到日期

[英]Adding months to a date based on a comparison where dateutil.relativedelta is greater than a specified amount of time

我的目標是根據start_dateend_date之間的時間段長度將指定的月數添加到start_date 超過10年的,加3個月,否則加1個月。 計算必須精確,並且應該能夠考慮給定月份以及閏年的特定天數。 我試圖通過使用dateutil.relativedelta來實現這一點, dateutil.relativedelta所示:

from dateutil.relativedelta import relativedelta
from dateutil import parser

# Extract date from string
start_date = parser.parse("2050-11-01")
end_date = parser.parse("1980-11-01")

# Calculate difference
delta = relativedelta(start_date, end_date)
print(delta)

if delta > relativedelta(years=+10):
    new_end_date = start_date + relativedelta(months=3)
else:
   new_end_date = start_date + relativedelta(months=1)

print(new_end_date)

但是,這給出了以下輸出:

相對增量(年=+70)
類型錯誤:“relativedelta”和“relativedelta”的實例之間不支持“>”

在 SO 上搜索錯誤清楚地表明沒有簡單的方法來比較dateutil.relativedelta 有沒有人知道我的用例的解決方法?

這是我的建議:

  • 設置您要測試的(相對)期限(10 年)
  • 將其添加到最早的輸入日期
  • 檢查新日期是否早於最新輸入日期

這樣,你仍然可以獲得相對岬relativedelta ,但你兩個硬盤的日期進行比較:

from dateutil.relativedelta import relativedelta
from dateutil import parser

# Extract date from string
start_date = parser.parse("2050-11-01")
end_date = parser.parse("1980-11-01")

# Set the size of the period
period = relativedelta(years=10)

# Test if adding the period to the earliest date makes it surpass the latest date
if min(start_date, end_date) + period <= max(start_date, end_date):
    new_end_date = start_date + relativedelta(months=3)
else:
   new_end_date = start_date + relativedelta(months=1)

print(new_end_date)
# 2051-02-01 00:00:00

在這種情況下,開始和結束並不意味着更早和更晚,因此您必須執行minmax操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM