[英]Date differences in Python in Years and Days (No Months)
我有兩個約會:2005/04/10和2018/02/11。
以下代碼以年,月和日為單位計算差異:
from datetime import datetime
from dateutil.relativedelta import relativedelta
start_date = datetime(2005,4,10)
end_date = datetime(2018,2,11)
difference = relativedelta(end_date, start_date)
print(difference.years)
print(difference.months)
print(difference.days)
輸出為:
12
10
1
12年10個月零1天。 問題是我對幾個月不感興趣,只希望在幾天和幾天之內。 在我的示例中,應該是12年零306天。 我知道一個很好的近似值是10個月* 30 = 300天,但結果是301,而不是306。我想精確計算出考慮leap日和每個月的天數差異的天數。 Python中是否有內置方法可以做到這一點?
看起來我已經在StackOverflow上進行了研究以找到答案,但是與我的問題相關的所有問題都無法解決我的問題。
在您已經編寫了代碼之后,執行以下操作:
mid_date = datetime(start_date.year + difference.years, start_date.month, start_date.day)
print((end_date - mid_date).days)
這為您的示例輸入提供了307。
這樣做的想法是將原始的開始start_date
與difference.years
start_date
抵消,以避免重復計算差額的該部分。
由於約翰的評論,我編寫了這段代碼,我認為它滿足了我的要求:
from datetime import datetime
from dateutil.relativedelta import relativedelta
start_date = datetime(2005,4,10)
end_date = datetime(2018,2,11)
difference = relativedelta(end_date, start_date)
remaining_days = 0
if start_date != datetime(start_date.year, 1, 1):
end_first_year = datetime(start_date.year, 12, 31)
remaining_days += (end_first_year - start_date).days
if end_date != datetime(start_date.year, 1, 1):
begin_last_year = datetime(end_date.year, 1, 1)
remaining_days += (end_date - begin_last_year).days
print(difference.years)
print(remaining_days)
剩下的確切天數為306。 誰能建議一個不太冗長的代碼段?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.