字符串“ 3d02h”的确切日期

时间:2019-09-04 16:46:39

标签: python datetime strptime

我正在从SSH连接输出中提取一个字符串,这给了我一个类似于'3d02h'的字符串,我必须将此日期插入数据库中。

输出来自在cisco_switch中执行的命令“ show spanning-tree detail | inc ieee | occurr | from | is exec”,它给出了以下输出:

VLAN0001正在执行与ieee兼容的生成树协议 拓扑更改数490最近一次更改发生在3d02h之前 来自GigabitEthernet1 / 0/11

所以我用.split()函数从输出中提取了'3d02h'。

现在我想将字符串转换为日期时间对象。

我尝试使用datetime.strptime(string,“%d%H”)从字符串中提取日期和小时,但这不起作用。

2 个答案:

答案 0 :(得分:0)

我已经用re和parsedatetime完成了。

from datetime import datetime
import parsedatetime as pdt
import re
cal = pdt.Calendar()
print(datetime.now())
date = "3d02h"
index = 2
date = re.findall(r'[A-Za-z]+|\d+', date)
date_len = int(len(date))
date_len = date_len // 2
for item in range(0, date_len):
    date.insert(index, ' ago ')
    index += 3
date = "".join(date)
print(date)
date, flags = cal.parseDT(date)
assert flags
print(date)

输出为:

2019-09-05 13:37:28.710065
3d ago 02h ago 
2019-09-02 11:37:28

答案 1 :(得分:0)

  

问题:一段时间内的日期

from datetime import datetime, timedelta
import re

dayshour = "3d02h"
now = datetime.strptime('2019-09-05 13:37:28.710065', 
                        '%Y-%m-%d %H:%M:%S.%f')

days, hours, _ = re.split(r'[dh]', dayshour)

ago = now - timedelta(days=int(days), hours=int(hours))

print('now:{}\n{} => {}, {}\nago:{}'\
      .format(now, dayshour, int(days), int(hours), 
              ago.strftime('%Y-%m-%d %H:%M:%S')))
  

输出

now:2019-09-05 13:37:28.710065
3d02h => 3, 2
ago:2019-09-02 11:37:28

使用Python测试:3.6