如何在Python中更改时间格式?

3
如何获取以下列表:
 [datetime.date(2011, 4, 1), datetime.date(2011, 4, 8), datetime.date(2011, 4, 16), datetime.date(2011, 5, 21)]

as

['2011-04','2011-05']

它不仅转换成字符串,而且还能去重。
3个回答

6

使用 datetime.date.strftime 将日期转换为字符串。

dates = [date.strftime('%Y-%m') for date in dates]

你可以通过将列表转换为集合,然后再转回列表来删除重复项。
dates = list(set(dates))

然后将这两种方法结合起来,一步完成所有操作。
dates = list(set([date.strftime('%Y-%m') for date in dates]))

我首先需要将日期转换为字符串...否则天数都会不同。 - Merlin
@user428862 我快到了。耐心点。 ;) - Judge Maygarden
1
set模块已被弃用,因为在2.6版本中它已成为内置类。因此,它更是Python的一部分。 - Judge Maygarden
@judge...作为一名新手...废弃意味着过时了...因此,在2.7和3.1中我可以使用set. 对吗... - Merlin
1
@user428862 是的,你可以继续使用 set。再次强调,set 类并没有被弃用。它曾经在一个单独的模块中,但现在已经被移入 Python 标准库中。因此,旧模块被弃用了,而不是 set 类本身。 - Judge Maygarden
显示剩余2条评论

1
>>> dates = [datetime.date(2011, 4, 1), datetime.date(2011, 4, 8), datetime.date(2011, 4, 16), datetime.date(2011, 5, 21)]
>>> set([date.strftime('%Y-%m') for date in dates])
set(['2011-05', '2011-04'])

set将列表转换为集合对象,去除重复项。 [date.strftime('%Y-%m')for date in dates] 是一个列表推导式,使用 strftime 函数和年月模式将每个日期转换为字符串。


1
In [43]: import datetime

In [44]: dates=[datetime.date(2011, 4, 1), datetime.date(2011, 4, 8), datetime.date(2011, 4, 16), datetime.date(2011, 5, 21)]

In [45]: set([date.strftime('%Y-%m') for date in dates])
Out[45]: set(['2011-04', '2011-05'])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接