如何使用Python从字符串日期列表中获取给定月份的所有日期?

时间:2018-07-01 12:20:29

标签: python list-comprehension

我想获取给定年份-月份的所有日期,但结果不正确。获取给定年份-月份中所有日期的更好方法是什么?

d = ['2006-12-30', '2006-12-31', '2006-1-1', '2006-11-30', '2006-10-1','2006-9-30'] 

key = '2006-1'
[i for i in d if key in i]

它提供输出

['2006-12-30', '2006-12-31', '2006-1-1', '2006-11-30', '2006-10-1']

我需要的时候

['2006-1-1']

预先感谢您的帮助吗?

3 个答案:

答案 0 :(得分:3)

将密钥从2006-1更改为2006-1-

>>> d = ['2006-12-30', '2006-12-31', '2006-1-1', '2006-11-30', '2006-10-1','2006-9-30'] 
>>> key = '2006-1-'
>>> [i for i in d if key in i]
['2006-1-1']

但是更好的方法是将字符串转换为datetime对象,然后做出决定

>>> from datetime import datetime
>>> [i for i in d if datetime.strptime(i, '%Y-%m-%d').strftime('%Y-%m') == '2006-01']
['2006-1-1']

答案 1 :(得分:0)

也许有更好的方法,但是可以检查2006年1月1日至2006年1月31日之间的所有日期

import datetime

d = ['2006-12-30', '2006-12-31', '2006-1-1', '2006-11-30', '2006-10-1','2006-9-30'] 

dates_list = [datetime.datetime.strptime(date, '%Y-%m-%d').date() for date in d]

low = datetime.datetime.strptime('2006-01-01', '%Y-%m-%d').date()
up = datetime.datetime.strptime('2006-01-31', '%Y-%m-%d').date()


within = [date for date in dates_list if low <= date <= up]

print(within)

答案 2 :(得分:-1)

在您的情况下,2006-12006-1中都包含2006-12。这就是为什么您没有得到预期答案的原因。

您可以尝试以下方法:

d = ['2006-12-30', '2006-12-31', '2006-1-1', '2006-11-30', '2006-10-1','2006-9-30'] 
key = '2006-1'
output= [i for i in d if i.split("-")[0]==key.split("-")[0] and i.split("-")[1]==key.split("-")[1]]
print(output)