使用Python datetime获取每天的第一次和最后一次

时间:2016-08-18 19:40:46

标签: python datetime

我有一个这种格式的时间戳列表:'2016-08-01 13:02:57'或“%Y-%m-%d-%H-%M-%S-%f”

我想获得每天的第一次也是最后一次。因此,如果有两天8/1和7/29,该函数将返回4个值。例如:

8/1
first: '2016-08-01 13:02:57'
last: '2016-08-01 13:08:44'

7/29
first: '2016-07-29 14:34:02'
last: '2016-07-29 14:37:35'

第一次是当天首先出现的那一次,最后一次是当天最后一次出现的那次。

3 个答案:

答案 0 :(得分:1)

按年 - 月 - 日分组,然后获得最小值和最大值:

from collections import defaultdict
d = defaultdict(list)
dates = ['2016-08-01 13:02:54',............]
for dte in dates:
    key, _ = dte.split()
    d[key].append(dte)

for k,v in d.items():
    print(min(v), max(v))

由于日期格式不需要转换为日期时间,因此词典比较工作正常。你可以创建一个在一个循环中执行min和max的函数,但它可能没有内置函数那么快。

答案 1 :(得分:1)

词法比较是您的日期时间格式给出最小和最大日期。因此,您只需将每个日期时间分组在一个列表中的相同日期:

from collections import defaultdict
dates = ['2016-08-01 13:02:57', '2016-08-01 13:08:44', ...]
dates_and_times = defaultdict(list)
for date in dates:
    d, t = date.split()
    dates_and_times[d].append(t)

for date, times in dates_and_times.items():
    print(date, min(times))
    print(date, max(times))

答案 2 :(得分:-1)

为了明智地对您的数据进行分组,我可能会以下列方式使用字典:首先将字符串分为日期的一半和一半。

d = dict()
for item in L:
    if item in d:
        d[item] = [time]
    else:
        d[item].append(time)

然后你有dict将某些日期映射到一个时间列表。然后使用一些日期时间函数可能很简单,它可以执行max(list)和min(list)来给你最早和最晚的时间。