2016-07-31 30 views
3

我需要比較服務器中的兩個日期與每一行數據上的python。在這種情況下,我使用了datetime,但由於一些限制,它會在大數據上浪費大量時間。我用下面的代碼創建一個datetime對象,並在進一步使用:將兩個日期比較爲字符串

first_date = datetime.strptime(line_content[3], '%Y-%m-%dT%H:%M:%S.000000Z') 
second_date = datetime.strptime(line_content[4].strip(), '%Y-%m-%dT%H:%M:%S.000000Z') 

我想他們要比較的字符串的日期,不要使用datetime,如果我這樣做會有一個很大的時間成本降低這些數據。所以在Python中使用下面的測試在此方面:

>>> "2016-07-28T06:04:12.000000Z" < "2016-04-28T06:04:13.000000Z" 
False 
>>> "2016-07-28T06:04:12.000000Z" < "2016-07-28T06:04:13.000000Z" 
True 
>>> 
>>> "2016-07-28T06:04:12.000000Z" < "2016-07-28T06:04:11.000000Z" 
False 
>>> "2016-07-28T06:04:12.000000Z" < "2016-07-28T06:04:12.000000Z" 
False 
>>> "2016-07-28T06:04:12.000000Z" < "2016-07-28T07:04:12.000000Z" 
True 
>>> "2016-07-28T06:04:12.000000Z" < "2016-07-28T06:04:12.000000Z" 
False 
>>> 
>>> "2016-07-28T06:04:12.000000Z" < "2016-07-26T06:04:12.000000Z" 
False 
>>> "2016-07-28T06:04:12.000000Z" < "2016-07-29T06:04:12.000000Z" 
True 
>>> "2016-07-28T06:04:12.000000Z" < "2016-07-28T06:04:12.000000Z" 
False 
>>> 

這是一個很好的方法來比較日期。我的意思是你能告訴我一個例子,這段代碼不起作用嗎?

+2

這既不是一個好的也不是一個工作的方式。 Python按字典順序比較字符串。構建一個'datetime'對象不應該是性能瓶頸。你確定這是問題的原因嗎? – DeepSpace

+0

@DeepSpace,但如果日期都是相同的格式,是不是一樣? – Julien

+0

@DeepSpace:所以一個顯而易見的不工作的例子不會有零填充。你能指出什麼時候'strptime'會這樣做嗎? – usr2564301

回答

3

是的 - 用Python進行日期解析很慢,因爲日期和時間是complex things。根據this stackoverflow線程,正則表達式可能會更快的解析。

我會再次考慮如果你真的需要解析字符串,因爲它看起來像你的數據是乾淨的,並在你的情況下具有相同的格式它可能工作。

事情要記住之前,這種做法會:

  • 你知道你的字符串的格式?
  • 真的是從年>月>日>小時>分>秒>等
  • 是否所有的數據都有相同的格式?
  • 你所有的數據都在同一個時區?