簡體   English   中英

Python中年和日(無月)中的日期差異

[英]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_datedifference.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.

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