2015-07-13 85 views
-1

具有下列數據:如何根據給定的開始日期和結束日期過濾包含日期的列表?

dates = ['4/6/2013', '5/4/2013', '6/26/2013', '7/26/2013', '9/5/2013', '10/7/2013', 
     '10/12/2013', '4/12/2014', '5/10/2014', '6/12/2014', '7/19/2014', '8/15/2014', 
     '9/17/2014', '4/21/2015', '5/28/2015', '6/26/2015'] 

如果用戶選擇start date = 1/1/2014和端date = 12/31/2014 所需的輸出應爲:

dates = ['4/12/2014', '5/10/2014', '6/12/2014', '7/19/2014', '8/15/2014', '9/17/2014'] 

我新到Python。我寫了一些代碼,但不能使它工作。請給我一些代碼。

+1

請顯示您到目前爲止嘗試過的內容。 –

+1

你好,歡迎來到Stack Overflow。我們一般喜歡它,如果你寫一些代碼*在這裏*。其他地方編寫的代碼不會幫助你解決問題。 :) – Amadan

+0

檢查此[鏈接](http://stackoverflow.com/questions/5464410/how-to-tell-if-a-date-is-between-two-other-dates-in-python) – The6thSense

回答

3

如果你已經嘗試過將日期作爲字符串處理,我建議使用datetime

您的字符串日期轉換爲datetime對象,然後就比較所有日期在開始和結束日期列表:

in_between_dates = [] 
for d in dt_dates: 
    if d >= start_date and d <= end_date: 
     in_between_dates.append(d) 

這裏我打印:

from datetime import datetime 

start_date = datetime.strptime('1/1/2014', '%m/%d/%Y') 
end_date = datetime.strptime('12/31/2014', '%m/%d/%Y') 
dates=['4/6/2013', '5/4/2013', '6/26/2013', '7/26/2013', '9/5/2013', '10/7/2013', '10/12/2013', '4/12/2014', '5/10/2014', '6/12/2014', '7/19/2014', '8/15/2014', '9/17/2014', '4/21/2015', '5/28/2015', '6/26/2015'] 

# this line creates a list of datetime objects from the given strings in list dates 
dt_dates = [datetime.strptime(date, '%m/%d/%Y') for date in dates] 

現在有開始和結束的比較輸出的字符串格式如下:

print [d.strftime('%m/%d/%Y') for d in in_between_dates] 
# prints: ['04/12/2014', '05/10/2014', '06/12/2014', '07/19/2014', '08/15/2014', '09/17/2014'] 

da的兩種主要方法此處使用的tetime分別爲strptime and strftime,用於將字符串轉換爲日期時間對象並將日期時間轉換爲字符串。

0
from datetime import datetime as dt 

st = "1/1/2014" 
end = "12/31/2014" 

# returns True if d1 is smaller than d2 
def is_smaller(d1, d2): 
    return dt.strptime(d1, "%m/%d/%Y") < dt.strptime(d2, "%m/%d/%Y") 

# returns True if date is in between st and end 
def filter_func(date): 
    return is_smaller(st, date) and is_smaller(date, end) 

dates=['4/6/2013', '5/4/2013', '6/26/2013', '7/26/2013', '9/5/2013', '10/7/2013', '10/12/2013', '4/12/2014', '5/10/2014', '6/12/2014', '7/19/2014', '8/15/2014', '9/17/2014', '4/21/2015', '5/28/2015', '6/26/2015'] 

print(list(filter(filter_func, dates))) 

我剛給你的想法。現在,您可以根據自己的需要進行修改。查找有關filter的更多信息。

0

您可以使用datetime庫將日期字符串轉換爲日期時間對象,以便進行比較。然後,您可以簡單地使用列表理解來生成所需日期的列表。

>>>from datetime import datetime 
>>>start_date = datetime.strptime('1/1/2014', '%m/%d/%Y') 
>>>end_date = datetime.strptime('12/31/2014', '%m/%d/%Y') 
>>>dates=['4/6/2013', '5/4/2013', '6/26/2013', '7/26/2013', '9/5/2013', '10/7/2013', '10/12/2013', '4/12/2014', '5/10/2014', '6/12/2014', '7/19/2014', '8/15/2014', '9/17/2014', '4/21/2015', '5/28/2015', '6/26/2015'] 
>>>gooddates = [i for i in dates if start_date < datetime.strptime(i, '%m/%d/%Y') <end_date] 

['4/12/2014', '5/10/2014', '6/12/2014', '7/19/2014', '8/15/2014', '9/17/2014'] 
相關問題