按python3中的datetime排序

时间:2018-05-08 20:22:22

标签: python-3.x sorting datetime dictionary

寻找有关如何使用下面的时间戳对datetime对象(如下所示,字典中的值)对python3 dictonary进行排序的帮助。

datetime: "2018-05-08T14:06:54-04:00"

任何帮助都会受到赞赏,花了一点时间在这上面并知道创建我能做的对象:

format = "%Y-%m-%dT%H:%M:%S"
# Make strptime obj from string minus the crap at the end
strpTime = datetime.datetime.strptime(ts[:-6], format)
# Create string of the pieces I want from obj
convertedTime = strpTime.strftime("%B %d %Y, %-I:%m %p")

但我不确定如何将其与其他值进行比较,以便正确地,干净地解释日期和时间。

再次,非常感谢正确方向的任何推动!

提前致谢。

1 个答案:

答案 0 :(得分:3)

Datetime实例支持通常的排序运算符(<等),因此您应该直接在datetime域中订购,而不是使用字符串。

使用callable将字符串转换为 timezone-aware 日期时间实例:

from datetime import datetime

def key(s):
    fmt = "%Y-%m-%dT%H:%M:%S%z"
    s = ''.join(s.rsplit(':', 1))  # remove colon from offset
    return datetime.strptime(s, fmt)

此键功能可用于正确排序值:

>>> data = {'s1': "2018-05-08T14:06:54-04:00", 's2': "2018-05-08T14:05:54-04:00"}
>>> sorted(data.values(), key=key)
['2018-05-08T14:05:54-04:00', '2018-05-08T14:06:54-04:00']
>>> sorted(data.items(), key=lambda item: key(item[1]))
[('s2', '2018-05-08T14:05:54-04:00'), ('s1', '2018-05-08T14:06:54-04:00')]