【问题标题】:Jira python calculate timeJira python计算时间
【发布时间】:2016-06-10 08:57:14
【问题描述】:

我正在尝试计算从创建问题到解决问题的时间。使用这些字段:

creation_time = issue.fields.created
resolved_time = issue.fields.resolutiondate

打印时输出:

Creation: 2016-06-09T14:37:05.000+0200 Resolved: 2016-06-10T10:53:12.000+0200

无论如何我可以用创建日期和时间减去解决日期和时间来找出在一个问题上花费了多少时间?

【问题讨论】:

    标签: python jira python-jira


    【解决方案1】:

    将日期/时间字符串解析为合适的日期时间对象,然后您可以使用它们进行计算。

    This post 解释了如何解析日期/时间字符串,或者您可以看看documentation for the strptime() method

    对于计算,this post 中有示例,here 中有详细文档。

    例如,这样的事情应该接近解决方案:

    from datetime import datetime
    from datetime import timedelta
    
    createdTime = datetime.strptime('2016-06-09T14:37:05.000+0200', '%Y-%m-%dT%H:%M:%S.%f')
    resolvedTime = datetime.strptime('2016-06-10T10:53:12.000+0200', '%Y-%m-%dT%H:%M:%S.%f')
    
    duration = resolvedTime - createdTime
    

    duration 将是一个 timedelta 对象,您可以访问 duration.daysduration.seconds 和 duration.microseconds 来获取它的信息。

    strptime 确实有一个缺点,它不支持解析时区,因此您必须先剪切输入的那部分。或者,请参阅this post

    【讨论】:

    • 我的情况如何?
    • 添加了一个应该接近你需要的例子。
    • 我收到这个错误ValueError: 'z' is a bad directive in format '%Y-%m-%dT%H:%M:%S.%f%z' Maye dateutil is more enough to use(stackoverflow.com/questions/6571419/…)
    • 原来 strptime 不处理时区。我已经更新了答案,并添加了另一个指向带有解决方案的帖子的链接。
    【解决方案2】:

    我编写了一个函数,以天为单位计算响应时间的均值、中值和方差。希望有帮助;

    import datetime as d
    import numpy as np
    
    ymd_create = []
    ymd_resdate = []
    delta_t = []
    
    class calculate:
        def __init__(self):
            self.result = 0
    
        def meantime(self, issueobject):
            for i in range(0, len(issueobject)):
                ymd_create.append(d.datetime(int(issueobject[i].raw[u'fields'][u'created'].split('T')[0].split('-')[0]), int(issueobject[i].raw[u'fields'][u'created'].split('T')[0].split('-')[1]), int(issueobject[i].raw[u'fields']
                                                                                                                                                                                                         [u'created'].split('T')[0].split('-')[2]), int(issueobject[i].raw[u'fields'][u'created'].split('T')[1].split(':')[0]), int(issueobject[i].raw[u'fields'][u'created'].split('T')[1].split(':')[1])))
                ymd_resdate.append(d.datetime(int(issueobject[i].raw[u'fields'][u'resolutiondate'].split('T')[0].split('-')[0]), int(issueobject[i].raw[u'fields'][u'resolutiondate'].split('T')[0].split('-')[1]), int(issueobject[i].raw[u'fields']
                                                                                                                                                                                                                        [u'resolutiondate'].split('T')[0].split('-')[2]), int(issueobject[i].raw[u'fields'][u'resolutiondate'].split('T')[1].split(':')[0]), int(issueobject[i].raw[u'fields'][u'resolutiondate'].split('T')[1].split(':')[1])))
                delta_t.append((ymd_resdate[i] - ymd_create[i]).days)
    
            self.result = np.mean(np.array(delta_t))
            return self.result
    
        def mediantime(self, issueobject):
            for i in range(0, len(issueobject)):
                ymd_create.append(d.datetime(int(issueobject[i].raw[u'fields'][u'created'].split('T')[0].split('-')[0]), int(issueobject[i].raw[u'fields'][u'created'].split('T')[0].split('-')[1]), int(issueobject[i].raw[u'fields']
                                                                                                                                                                                                         [u'created'].split('T')[0].split('-')[2]), int(issueobject[i].raw[u'fields'][u'created'].split('T')[1].split(':')[0]), int(issueobject[i].raw[u'fields'][u'created'].split('T')[1].split(':')[1])))
                ymd_resdate.append(d.datetime(int(issueobject[i].raw[u'fields'][u'resolutiondate'].split('T')[0].split('-')[0]), int(issueobject[i].raw[u'fields'][u'resolutiondate'].split('T')[0].split('-')[1]), int(issueobject[i].raw[u'fields']
                                                                                                                                                                                                                        [u'resolutiondate'].split('T')[0].split('-')[2]), int(issueobject[i].raw[u'fields'][u'resolutiondate'].split('T')[1].split(':')[0]), int(issueobject[i].raw[u'fields'][u'resolutiondate'].split('T')[1].split(':')[1])))
                delta_t.append((ymd_resdate[i] - ymd_create[i]).days)
    
            self.result = np.median(np.array(delta_t))
            return self.result
    
        def variancetime(self, issueobject):
            for i in range(0, len(issueobject)):
                ymd_create.append(d.datetime(int(issueobject[i].raw[u'fields'][u'created'].split('T')[0].split('-')[0]), int(issueobject[i].raw[u'fields'][u'created'].split('T')[0].split('-')[1]), int(issueobject[i].raw[u'fields']
                                                                                                                                                                                                         [u'created'].split('T')[0].split('-')[2]), int(issueobject[i].raw[u'fields'][u'created'].split('T')[1].split(':')[0]), int(issueobject[i].raw[u'fields'][u'created'].split('T')[1].split(':')[1])))
                ymd_resdate.append(d.datetime(int(issueobject[i].raw[u'fields'][u'resolutiondate'].split('T')[0].split('-')[0]), int(issueobject[i].raw[u'fields'][u'resolutiondate'].split('T')[0].split('-')[1]), int(issueobject[i].raw[u'fields']
                                                                                                                                                                                                                        [u'resolutiondate'].split('T')[0].split('-')[2]), int(issueobject[i].raw[u'fields'][u'resolutiondate'].split('T')[1].split(':')[0]), int(issueobject[i].raw[u'fields'][u'resolutiondate'].split('T')[1].split(':')[1])))
                delta_t.append((ymd_resdate[i] - ymd_create[i]).days)
    
            self.result = np.var(np.array(delta_t))
            return self.result
    

    【讨论】:

      【解决方案3】:

      strptime 不支持解析时区。 这段代码对我有用

      from datetime import datetime
      createdTime = datetime.strptime(issue.fields.created.split(".")[0], '%Y-%m-%dT%H:%M:%S')
      resolvedTime = datetime.strptime(issue.fields.resolutiondate.split(".")[0], '%Y-%m-%dT%H:%M:%S')
      duration = resolvedTime - createdTime
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-08-26
        • 2010-12-26
        • 2017-08-24
        • 1970-01-01
        • 2012-08-06
        • 2016-05-22
        相关资源
        最近更新 更多