2011-03-14 56 views
1

考慮到我以字符串開頭,如​​(月/日/年),當前日期爲2011年3月13日(7天后)我可以在Python中找到自那時以來經過的年數(7/365 = 0.0191780821917808)嗎?Python:獲取從日期字符串中獲得的年數

請注意,我希望能夠處理任何輸入日期。不是任何格式,你可以假設上面的格式。

回答

7

您可以通過減去兩個datetime s得到timedelta,這爲您提供了很多很酷的方法來處理時差。

>>> import datetime 
>>> before = datetime.datetime.strptime('3/6/2011','%m/%d/%Y') 
>>> now = datetime.datetime.now() 
>>> type(now-before) 
<type 'datetime.timedelta'> 
>>> (now-before).days 
7 
>>> float((now-before).days)/365 
0.019178082191780823 

編輯:哇,誰曾想過有這麼多的深入到這個簡單的問題。看看this question上票數最多的答案。處理閏年是一個「困難」的問題。 (贈送@kriegar)

+0

我再經365分(現已前).days拿到分數的一年。 – 2011-03-14 03:15:46

+1

不是閏年是這個解決方案的問題嗎? – DTing 2011-03-14 03:25:23

+0

我的應用程序已經有了一些誤差,所以閏年可能並不是什麼大問題,因爲這個誤差<1%。感謝您的解決方案 – Muhd 2011-03-14 03:53:10

1
>>> import datetime 
>>> datestring = "3/6/2011" 
>>> (datetime.date.today() - datetime.datetime.strptime(datestring, "%m/%d/%Y").date()).days/365.0 
0.019178082191780823 
1

以上所有答案都沒有考慮到閏年。看起來這個問題的討論與你的問題有關。

Pythonic difference between two dates in years?

+1

公平地說,他確實在他的問題中提出了「x/365」答案。 – 2011-03-14 03:27:46

+0

+1,但我想說的是,使用365的分數年很腥 – DTing 2011-03-14 03:29:21

+0

極好的一點。在閱讀你的鏈接之後,很明顯,這是一個比起初看起來更難的問題 - 主要是因爲我們認爲「年」是對時間的非常一致的衡量,但實際上它的變量取決於你「重新談論。 – 2011-03-14 03:38:41