python: 计算在 status 中花费的时间 written in a dict

python: calculate time spent in status written in a dict

我正在编写用于收集 JIRA 统计数据的脚本 现在我一直在计算 'Time in status'

使用 JIRA 施展魔法后 API 我有一本字典:

{   
'2014-12-25T16:47:08': 'In Progress',
'2015-05-25T19:47:54': 'INFO Request',
'2015-06-05T11:04:00': 'In Progress',
'2016-04-15T19:22:01': 'Postponed',
'2017-02-07T12:12:58': 'In Progress',
'2017-02-07T12:13:22': 'Postponed',
'2017-08-12T19:02:59': 'In Progress',
'2018-11-13T18:00:38': 'Resolved',
'2018-11-13T18:03:03': 'Closed'},

嗯,atm 我写了这个东西:

def calc_in_status(dic):
formt="%Y-%m-%dT%H:%M:%S"
res_dic={}
for key,value in dic.items():
    if value not in res_dic and value != 'Closed':
       res_dic.update({value: datetime.strptime(key, formt)})
return res_dic

现在它会生成一个初始指令,即

{   'In Progress': datetime.datetime(2015, 6, 2, 16, 50, 37),
'PM Review': datetime.datetime(2015, 9, 16, 16, 21, 52),
'Postponed': datetime.datetime(2015, 12, 21, 13, 12, 46),
'Resolved': datetime.datetime(2015, 7, 7, 16, 52, 13)}

我需要一些帮助来计算工单在上述所有状态下花费了多少时间。 而且我不知道如何遍历它,同时发现然后票改变了它的状态,计算时间戳差异并将其写入结果字典。

使用datetime模块:

from datetime import datetime
datetime_object1 = datetime.strptime('2014-12-05T16:47:08', '%Y-%m-%dT%X')
datetime_object2 = datetime.strptime('2014-12-25T16:47:08', '%Y-%m-%dT%X')

您只需减去两个日期时间之间的时间差即可:

datetime_object2 - datetime_object1

遍历字典:

for key in my_dict.keys(): ...

鉴于您的用例,您不应使用字典,因为它不会维护包含对象的任何顺序。考虑使用 OrderedDict,它很像字典,只是它还记得其元素的顺序。 示例:

from collections import OrderedDict
my_data = OrderedDict([('In Progress', datetime_object1),
                       ('PM Review', datetime_object2)])
time_diff = my_data.items()[1][1] - my_data.items()[0][1] # Subtract the date of the second item from the date of the first item