2015-07-10 122 views
4
>> a ='2009-05-10' 
>>> b ='2009-06-10' 
>>> a > b 
False 
>>> a < b 
True 
>>> type(a) 
<class 'str'> 
>>> c = '2009-06-09' 
>>> b < c 
False 
>>> b > c 
True 
>>> c ='2008-07' 
>>> b > c 
True 
>>> a > c 
True 

我試圖在沒有使用庫的情況下比較python3中的日期,它似乎工作正常。 這是真實的情況嗎? python是否真的明白這些字符串是日期,並根據日期格式進行比較,或者其他內容是在幕後進行的?在python中比較日期字符串

+3

如果你選擇一個合理的日期格式類似,字符串的標準辭書排序,工作起來就像知道他們是日期;它**不會**,但。 – jonrsharpe

+0

如果Python只是簡單地分析你的字符串內容以找出它們代表的內容,爲什麼它會有一個內置的[datetime](https://docs.python.org/2/library/datetime.html)模塊? –

+0

是的。現在事情很清楚。謝謝。 – SpiderRico

回答

7

不,這種行爲背後沒有空間。事實上,Python比較了字典中的字典,在這種情況下,它是有效的,但它不是正確的方法,因爲它也可以接受錯誤的日期!

這裏是一個反例

>>> a ='2009-33-10' 
>>> b ='2009-11-1' 
>>> a>b 
True 

至於對付的約會,你應該使用datetime模塊裏面有很多的工具與Date對象的工作之有道。

您可以使用datetime.datetime.strptime將字符串轉換爲日期對象,然後您可以使用基本的算術運算來比較日期對象,因爲它們已經被該模塊支持。

enter image description here

+0

@Kasramvd你的解釋沒有問題。但是,當datetime字符串統一格式化(以便您的示例不適用)並且格式化爲datetime對象的上下文時,那麼直接的datetime字符串比較實際上是Python3的一個很好的特性! – Devy

+0

@Devy事實上,在這種情況下,你可以。但是,基本上你最好不要這樣做(因爲通常不能保證總能得到一致的格式),除非它能夠給你帶來顯着的性能改變。 – Kasramvd