Convert other time values to datetime format in Python
我有一次是这样的:
1 | 2012-11-12 15:16:08.648521 |
另一个时间显示为:
1 | 14:44:02 Mon Nov 12 2012 |
是否有任何方法可以将第二次格式转换为第一次格式(例如,2012年11月12日星期一14:44:02变为2012-11-12 14:44:02.??????)?我需要将第二个日期(从日志中提取)与另一个日期进行比较,以确认我得到了正确的文件。
看看datetime.datetime.strptime。
您只需要为每个格式编写一个格式规范,将这两个值转换为
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 | >>> import datetime >>> fmt1 = '%Y-%m-%d %H:%M:%S.%f' >>> fmt2 = '%H:%M:%S %a %b %d %Y' >>> s1 = '2012-11-12 15:16:08.648521' >>> s2 = '14:44:02 Mon Nov 12 2012' >>> dt1 = datetime.datetime.strptime(s1, fmt1) >>> dt2 = datetime.datetime.strptime(s2, fmt2) >>> cmp(dt1, dt2) 1 >>> dt1 datetime.datetime(2012, 11, 12, 15, 16, 8, 648521) >>> dt2 datetime.datetime(2012, 11, 12, 14, 44, 2) |
请注意,您的一种时间格式包括微秒,而另一种不包括微秒,这意味着只有当第一个时间格式恰好位于第二个标记(以
例如,如果要四舍五入到最接近的秒,可以执行以下操作:
1 2 3 | dt1 = datetime.datetime(dt1.year, dt1.month, dt1.day, dt1.hour, dt1.minute, dt1.second + (1 if dt1.microsecond >= 500000 else 0), 0) |
或者,如果要检查某个增量范围内的相等性:
1 | abs(dt2 - dt1) < datetime.timedelta(0, 1) |
你可能遇到的另一个问题是时区。如果其中一个日期是本地日期,另一个是格林尼治标准时间,则必须在解析后转换其中一个日期。
您最初的问题是询问如何将一种格式转换为另一种格式。您可以这样做,然后将它们作为字符串进行比较,但最好将它们作为实际的
1 2 | >>> datetime.datetime.strftime(dt2, fmt1) '2012-11-12 14:44:02.00000' |
尝试
1 | datetime.strptime("14:44:02 Mon Nov 12 2012","%H:%M:%S %a %m %d %Y").strftime("%Y-%m-%d %H:%M:%S.%f") |