【问题标题】:Trying to write a time delta function尝试编写时间增量函数
【发布时间】:2019-08-31 12:03:39
【问题描述】:

我正在尝试在 python 中编写一个函数,我可以输入一个开始时间和结束时间,它将返回总小时数。

目前我已经能够编写一个函数,例如输入 ('07:30:00', '12:00:00') 并返回 4.5

我希望能够导入列表。例如,

('07:30:00, 08:30:00', '12:00:00, 12:00:00') 并让它返回 4.5 , 3.5 等......

如何更改我的代码以便执行此操作?

谢谢

我已经搞砸了几个小时,但对 python 很陌生,所以不知道如何从这里开始

def compute_opening_duration(opening_time, closing_time):
    while True:
        try:
            FORMAT = '%H:%M:%S'
            tdelta = datetime.strptime(closing_time, FORMAT) - datetime.strptime(opening_time, FORMAT)
            tdelta_s = tdelta.total_seconds()
            tdelta_m = tdelta_s/60
            tdelta_h = tdelta_m/60
            print(tdelta_h)
            break
        except ValueError:
            print('-1')
            break

【问题讨论】:

  • 附加参数表示附加检查。您在一个参数中多次传递,因此您必须将它们分开。 opening_time.split(',') 将完成这项工作。它将根据分隔符将字符串分成 n 段。通过索引访问它们,它只是一个简单的列表。

标签: python datetime


【解决方案1】:

将数组作为参数传递给函数。检查打开时间数组的长度是否与关闭时间数组的长度相同。声明结果数组,在计算 tdelta 的行中,您必须添加到结果数组。

def compute_opening_duration(opening_time_arr, closing_time_arr):
    if len(opening_time_arr) != len(closing_time_arr):
        return
    resultTime = []
    for idx, closing_timein enumerate(closing_time_arr) :
            try:
                FORMAT = '%H:%M:%S'
                tdelta = datetime.strptime(closing_time, FORMAT) - 
    datetime.strptime(opening_time_arr[idx], FORMAT)
                resultTime.append(tdelta)
                tdelta_s = tdelta.total_seconds()
                tdelta_m = tdelta_s/60
                tdelta_h = tdelta_m/60
                #print(tdelta_h)
            except ValueError:
                pass   
            #print('-1')
    return resultTime

【讨论】:

  • 如何获取结果并将其存储为 np.array 而无需在后台打印函数。我正在尝试定义 array = np.array(compute_blah_blah) 但它一直在打印。
  • 您要打印功能吗?还是其他?
  • 我想在将其转换为数组后稍后打印它。我尝试了 Return 而不是 print 但返回错误
  • if语句有错误。此外,我更改打印功能通过。你有什么类型的错误,在哪一行代码中?
  • 没有错误,代码运行良好。但是,我想将其转换为数组。
【解决方案2】:

如果我答对了问题

def compute_opening_duration(time_list):
    # convert to datetime: 
    FORMAT = '%H:%M:%S'
    time_list = [datetime.strptime(time, FORMAT) for time in time_list]

    # compute and return deltas
    return [(close_time-open_time).total_seconds()/3600 
            for open_time, close_time in zip(time_list[:-1], time_list[1:])


【讨论】:

  • 聪明的方法。对我来说看起来很棒。一个问题,你能澄清一下zip 函数在这里是如何工作的吗?谢谢!
  • 谢谢! zip 生成一个生成器,它通过将索引 0,...,n-2 处的元素分别与索引 (1,...,n-1) 配对(zip 输入中的两个列表推导),从 time_list 输出连续时间对
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多