python - 在 Python 中将其他时间值转换为日期时间格式

标签 python date time module compare

我有一次显示为:

2012-11-12 15:16:08.648521

还有一次显示为:

14:44:02 Mon Nov 12 2012

有什么方法可以将第二次格式转换为第一次格式的格式(例如 14:44:02 Mon Nov 12 2012 变成 2012-11-12 14:44:02.?????? )?我需要将第二个日期(从日志中提取)与另一个日期进行比较,以确认我获得了正确的文件。

最佳答案

datetime.datetime.strptime .

您只需为每种格式编写一个格式规范,将两个值都转换为 datetime 对象,然后进行比较。 (您可以将一种字符串格式转换为另一种格式并比较字符串,但这并不像我将在下面解释的那样好。)

例如:

>>> 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)

请注意,您的一种时间格式包括微秒,而另一种则不包括,这意味着只有当第一个恰好恰好在第二个标记处(以 .000000 结尾)时,它们才会真正相等>).如何处理取决于您要做什么。

例如,如果你想四舍五入到最接近的秒,你可以这样做:

dt1 = datetime.datetime(dt1.year, dt1.month, dt1.day, 
                        dt1.hour, dt1.minute, 
                        dt1.second + (1 if dt1.microsecond >= 500000 else 0), 0)

或者,如果您想检查某个增量范围内的相等性:

abs(dt2 - dt1) < datetime.timedelta(0, 1)

您可能会遇到的另一个问题是时区。如果这些日期之一是本地日期,另一个是 GMT,则必须在解析后进行转换。

您最初的问题是询问如何将一种格式转换为另一种格式。您可以这样做,然后将它们作为字符串进行比较,但最好将它们作为实际的datetime 值进行比较。一方面,如果将它们都转换为第二种格式,它们甚至不能作为字符串进行正确比较(14:44:02 Mon Nov 12 2012 小于 15:44: 02 Sun Nov 11 2012 即使是 23 小时后)。它还使处理微秒、时区等变得更加复杂。但是如果你真的要这么做的话,strftimestrptime的相反函数:

>>> datetime.datetime.strftime(dt2, fmt1)
'2012-11-12 14:44:02.00000'

关于python - 在 Python 中将其他时间值转换为日期时间格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13350909/

相关文章:

java - 如何通过传递特定日期来确定星期几?

javascript - 在Javascript中将毫秒转换为日期格式

javascript - 如果用户的机器使用 12 小时制(上午/下午)或 24 小时制(军用时间),则使用 javascript 进行检测

python - 在python中进行多次调度的简单方法? (没有外部库或类构建?)

php - PDO 动态参数绑定(bind) where 子句 AND 日期之间

python - 为数据集生成随机 JSON 结构排列

c++ - 使用C时间函数测量时间: are they code-reordering resistant?

c - 获取当前 X11 服务器时间

memory-management - Python:函数中的额外赋值

python - 在 matplotlib 图中更改 X 刻度