吉拉Python计算时间

2024-04-30 01:06:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图计算从问题产生到解决的时间。使用这些字段:

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

打印时输出:

^{pr2}$

有没有我可以减去解决日期和时间的创建日期和时间,以找出在一个问题上花费了多少时间?在


Tags: fieldstime时间issuecreation花费createdresolved
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

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

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

持续时间将是timedelta对象,您可以访问持续时间.天持续时间.秒持续时间.微秒获取信息。在

strptime的一个缺点是它不支持解析时区,因此您必须先删除输入的那部分内容。或者,请参见this post。在

相关问题 更多 >