繁体   English   中英

Python 将字符串转换为日期时间但格式不是很可预测

[英]Python convert string to datetime but formatting is not very predictable

我正在使用 Subprocess 和ps提取 Linux 进程的执行时间。 我想把它放在日期时间 object 中,以执行日期时间算术。 但是,我有点担心执行时间的 output ps返回值:

1-01:12:23    // 1 day, 1 hour, 12 minutes, 23 seconds   
  05:39:03    //        5 hours, 39 minutes, 3 seconds
     15:06    //                 15 minutes, 6 seconds

请注意,当天之前没有零填充。 而且它不包括月/年,而从技术上讲,某些东西可以运行那么长时间。

因此,我不确定将其转换为timedelta的格式字符串,因为如果一个进程运行了几个月,或者另一个进程只运行了几个小时,我不希望它中断。

更新

Mozway给出了一个非常聪明的答案。 但是,我退后一步,想知道是否可以通过其他方式获得执行时间。 我目前正在使用ps来获取时间,但这意味着我也有 pid。 我还能用 pid 做些什么,以更简单的格式获取执行时间吗?

(只能使用官方Python库)

更新2

它实际上是小时、分钟和秒之间的冒号。

你应该使用timedelta

以下是有关如何从字符串转换的建议:

import datetime

s = '1-01-12-23'
out = datetime.timedelta(**dict(zip(['days', 'hours', 'minutes', 'seconds'],
                                map(int, s.split('-')))))

Output:

datetime.timedelta(days=1, seconds=4343)

如果您可以有更多或更少的单位,并假设存在最小的单位,您可以利用zip以最小的可迭代停止的事实,只需反转输入:

s = '12-23'
units = ['days', 'hours', 'minutes', 'seconds']

out = datetime.timedelta(**dict(zip(reversed(units),
                                map(int, reversed(s.split('-'))))))

Output:

datetime.timedelta(seconds=743)

作为 function

使用re.split处理1-01:23:45格式

import re

def to_timedelta(s):
    units = ['days', 'hours', 'minutes', 'seconds']
    return datetime.timedelta(**dict(zip(reversed(units),
                                         map(int, reversed(re.split('[-:]', s))))))

to_timedelta('1-01:12:23')
# datetime.timedelta(days=1, seconds=4343)

to_timedelta('05:39:03')
# datetime.timedelta(seconds=20343)

to_timedelta('15:06')
# datetime.timedelta(seconds=906)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM