【问题标题】:In Python, I want to subtract a time period from within a time period在Python中,我想从一个时间段内减去一个时间段
【发布时间】:2020-04-09 10:02:36
【问题描述】:

我想计算一天的工作时间,然后从该时间中减去午餐时间。所以有人在 8:00 打卡,从 12:00 到 12:30 吃午饭,16:00 结束。 午餐时间在设置表中配置,包括开始时间和结束时间。

所以简而言之,我想计算一下:

结束时间减去开始时间 = n 小时:工作分钟数,减去午餐时间(= 12:30 - 12:00 = 30 分钟)

我怎样才能在 Python 中计算这个而不使它成为一个硬编码的东西? 非常感谢您的帮助

干杯

【问题讨论】:

  • 您是否有特定的时间格式?输入是字符串还是秒?你有没有尝试过什么?请注意,如果您的时间是开始、结束、午餐开始和午餐结束......您可以使用 (lunchstart-start) + (end-lunchend)
  • 欢迎堆栈溢出!请注意,这不是一个代码编写或教程网站,我们要求您提供一个minimal reproducible example,包括示例输入、示例输出和代码,用于您根据您已经尝试过的内容自己的研究
  • 尝试查看datetime 模块。这将允许您执行 total_worked = (clocks_out - clocks_in) - (lunch_end - lunch_start) 之类的操作

标签: python time calculation


【解决方案1】:

您可以使用 Python 日期时间来做到这一点:

import datetime as dt

def work_time(start, end, lunch=[], format_='%H:%M'):
    """ Calculate the hours worked in a day.
    """
    start_dt = dt.datetime.strptime(start, format_)
    end_dt = dt.datetime.strptime(end, format_)

    if lunch:
        lunch_start_dt = dt.datetime.strptime(lunch[0], format_)
        lunch_end_dt = dt.datetime.strptime(lunch[1], format_)
        lunch_duration = lunch_end_dt - lunch_start_dt
    else:
        lunch_duration = dt.timedelta(0)

    elapsed = end_dt - start_dt - lunch_duration
    hours = elapsed.seconds / 3600

    return hours
>>> work_time('8:00', '16:00', lunch=['12:00', '12:30'])
7.5

日期时间的documentation 提供了有关特定格式以及如何使用时间增量对日期时间和时间对象执行操作的更多信息。

【讨论】:

  • 查看您的解决方案,我的错误是尝试使用时间对象而不是日期时间,这更容易使用。很抱歉没有提供更多信息,但到目前为止我所拥有的东西几乎不能作为一个很好的例子。这是我可以使用的。干杯!
  • 如果您对答案感到满意,请将其标记为正确以结束问题:)
猜你喜欢
  • 2023-04-07
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多