如何对不同的日期时间格式进行排序?

2024-09-28 17:20:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码:

comments = sorted(comments, key=lambda k: k['time_created'])

如果某些元素具有不同的格式,如2017-12-14T17:42:30.345244+00002017-12-14 00:23:23.468560,并且我的代码在尝试比较时失败,如何正确排序?你知道吗

我需要保存seconds准确性。你知道吗

这是个好办法吗?你知道吗

comments = sorted(comments, key=lambda k: self.unix_time_millis(k['time_created']), reverse=True)


@staticmethod
def unix_time_millis(dt):
    epoch = datetime.datetime.utcfromtimestamp(0)
    return (dt - epoch).total_seconds() * 1000.0

Tags: lambdakey代码元素datetimetime格式dt
2条回答

Pythondatetime对象是可比较的,因此是可排序的。我假设您当前不使用datetime对象,而是使用字符串。下面的示例代码取自 How to format date string via multiple formats in python

import dateutil.parser
dateutil.parser.parse(date_string)

然后,您可以通过将字符串列表转换为datetime对象

list_of_dt_objs = [dateutil.parser.parse(str) for str in list_of_strings]

请注意,dateutil是一个扩展库。因此您必须安装它,例如通过pip。你知道吗

像这样:

import re
import operator

def convert_to_secs(date_string):
    multipliers = [31557600,2592000,86400,3600,60]
    date_in_secs = 0
    index = 0
    for v in re.split(':|-|T|\.|\+|\ ',date_string):
        if index < len(multipliers):
            date_in_secs = date_in_secs + int(v) * multipliers[index]
            index += 1
        else:
            break
    return date_in_secs

def sort_dates(my_dates_in_string):
    my_dates_dict = {}
    for string_date in my_dates_in_string:
        my_dates_dict[string_date] = convert_to_secs(string_date)
    return sorted(my_dates_dict.items(), key=operator.itemgetter(1))

print sort_dates(["2017-12-14T17:42:30.345244+0000", "2017-12-14 00:23:23.468560"])

相关问题 更多 >