在python中将日期列表转换为正确的日期类型格式

时间:2017-01-20 15:17:48

标签: python

我有一份日期清单:

dates = ["Jan2016","Feb2016","Mar2016"]

我想将这些日期转换为日期时间格式,即Jan2016 = 201601

我的第一个想法是创建一个月份字典及其相关数字,然后将其映射到列表中。

months = {"Jan":1,"Feb":2,"Mar":3}

这是我目前的代码:

dates = ["Jan2016","Feb2016","Mar2016"]
dic   = {"Jan":1, "Feb":2,"Mar":3}

month = []
year  = []

for date in dates:
    month.append(date[:3])
    year.append(date[3:])


month = [dic[n] if n in dic else n for n in month]

d = dict(zip(month,year))

print(d)

此代码的输出是这样的字典:

{1: '2016', 2: '2016', 3: '2016'}

解决这个问题最灵活的方法是什么?

3 个答案:

答案 0 :(得分:2)

正如@Martijin评论的那样,您不能将日期时间设为201601,但如果您想要字符串,则可以使用datetime模块中的strptimestrftime进行转换:< / p>

dates = ["Jan2016","Feb2016","Mar2016"]

from datetime import datetime

[datetime.strftime(datetime.strptime(d, "%b%Y"), "%Y%m") for d in dates]

# ['201601', '201602', '201603']

如果您不熟悉转换规范%b代表月份缩写名称,%Y年份代表世纪,%m月份代表十进制数字( 0-12)

答案 1 :(得分:1)

你好,你可以试试map()

months = {"Jan":"01", "Feb":"02", "Mar":"03"}
dates = ["Jan2016","Feb2016","Mar2016"]
list = map(lambda x :x[3:] + months[x[:3]], dates)

输出中:

  

['201601','201602','201603']

答案 2 :(得分:0)

您可以使用以下内容:

from datetime import datetime

datetime.strptime('Jan2016', '%b%Y')

对于您的列表,您可以将上述内容与list comprehension

结合使用
>>> res = [datetime.strptime(d, '%b%Y') for d in dates]
>>> [datetime.strftime(d, "%Y%m") for d in res]
['201601', '201602', '201603']

注意:由于您的日期列表中缺少这一天,因此1天将用于res个项目。