wp231957 发表于 2024-12-6 11:55:26

如何计算时差

1、在24小时制下   计算   时间段   23.00---2.00   1.00---3.00这两个时间段加一起是4个小时
2、在24小时制下,计算   时间段   9.00---10.00    15.00---17.009.30--12.00这三个时间段 加一起是   5个小时
请问   如何计算?

FishC 发表于 2024-12-6 11:55:33


计算时差可以通过将每个时间段的开始时间和结束时间相减来得到每个时间段的时长,然后将所有时间段的时长相加即可。

1. 对于时间段 23.00---2.00 和 1.00---3.00:
   - 23.00 到 2.00:跨越午夜,计算为 (24 - 23) + 2 = 3 小时
   - 1.00 到 3.00:计算为 3 - 1 = 2 小时
   - 总时长为 3 + 2 = 5 小时

2. 对于时间段 9.00---10.00、15.00---17.00 和 9.30--12.00:
   - 9.00 到 10.00:计算为 10 - 9 = 1 小时
   - 15.00 到 17.00:计算为 17 - 15 = 2 小时
   - 9.30 到 12.00:计算为 12 - 9.5 = 2.5 小时
   - 总时长为 1 + 2 + 2.5 = 5.5 小时

注意:如果时间段有重叠,需要去除重叠部分的时长。


以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

wp231957 发表于 2024-12-6 11:57:47

FishC 发表于 2024-12-6 11:55
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

错,这两个 重叠段你都没有去除所以结果全部错误
另,如何使用代码实现,,

FishC 发表于 2024-12-6 12:04:37

wp231957 发表于 2024-12-06 11:57
错,这两个 重叠段你都没有去除所以结果全部错误
...

要计算多个时间段的总时长并去除重叠部分,可以使用编程语言来实现。以下是一个使用Python的示例代码:

def calculate_total_hours(time_ranges):
    # 将时间段转换为分钟
    minutes_ranges = [(start * 60, end * 60) for start, end in time_ranges]
   
    # 合并重叠的时间段
    merged_ranges = []
    for start, end in sorted(minutes_ranges):
      if merged_ranges and merged_ranges[-1] >= start:
            merged_ranges[-1] = (merged_ranges[-1], max(merged_ranges[-1], end))
      else:
            merged_ranges.append((start, end))
   
    # 计算总时长
    total_minutes = sum(end - start for start, end in merged_ranges)
    total_hours = total_minutes / 60
    return total_hours

# 示例时间段
time_ranges_1 = [(23, 2), (1, 3)]
time_ranges_2 = [(9, 10), (15, 17), (9.5, 12)]

# 计算总时长
total_hours_1 = calculate_total_hours(time_ranges_1)
total_hours_2 = calculate_total_hours(time_ranges_2)

print(f"第一个时间段的总时长: {total_hours_1} 小时")
print(f"第二个时间段的总时长: {total_hours_2} 小时")

在这个代码中,我们首先将时间段转换为分钟,然后合并重叠的时间段,最后计算总时长。注意,时间段如 `(23, 2)` 表示从晚上11点到凌晨2点。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

jackz007 发表于 2024-12-6 16:29:34

本帖最后由 jackz007 于 2024-12-7 20:12 编辑

def delta(p , * t) :
    e = []
    for a , b in t :
      if a < p : a += 24
      if b < p : b += 24
      for k in range(len(e)) :
            if e <= a <= e or e <= b <= e :
                if e <= a <= e :
                  if b > e : e = b
                else :
                  if a < e : e = a
                break
      else :
            e . append()
    return sum(map(lambda x : int(x - x) , e))
               
print(delta(23 , (23.00 , 2.00) , (1.00 , 3.00)))
print(delta(9 , (9.00 , 10.00) , (15.00 , 17.00) , (9.30 , 12.00)))
      运行实况:
D:\\Python>python x.py
4
5

D:\\Python>

isdkz 发表于 2024-12-6 16:54:25

from datetime import datetime, timedelta

def calculate_union_hours(time_ranges):
    # 将时间段按开始时间排序
    sorted_ranges = sorted(time_ranges, key=lambda x: x)
   
    # 合并重叠或相邻的时间段
    merged_ranges = []
    for start, end in sorted_ranges:
      if not merged_ranges or start > merged_ranges[-1]:
            merged_ranges.append((start, end))
      else:
            merged_ranges[-1] = (merged_ranges[-1], max(merged_ranges[-1], end))
   
    # 计算总时长
    total_hours = 0
    for start, end in merged_ranges:
      total_hours += (end - start).total_seconds() / 3600# 秒转小时
   
    return total_hours

# 示例时间段(使用 datetime 对象)
time_ranges1 = [
    (datetime(2024, 12, 6, 23, 0), datetime(2024, 12, 7, 2, 0)),
    (datetime(2024, 12, 7, 1, 0), datetime(2024, 12, 7, 3, 0)),
]

time_ranges2 = [
    (datetime(2024, 12, 6, 9, 0), datetime(2024, 12, 6, 10, 0)),
    (datetime(2024, 12, 6, 15, 0), datetime(2024, 12, 6, 17, 0)),
    (datetime(2024, 12, 6, 9, 30), datetime(2024, 12, 6, 12, 0)),
]

# 计算并集总小时数
total_hours1 = calculate_union_hours(time_ranges1)
print(f"1、总小时数: {total_hours1}")

total_hours2 = calculate_union_hours(time_ranges2)
print(f"2、总小时数: {total_hours2}")

Stubborn 发表于 2024-12-6 17:34:36

如果有需求计算重复的时间段,我认为,至少23:00 - 1:00 这种时间段不合理。因为跨越天数,你问题表达的重叠段隐形条件应该是在同一天内。

wp231957 发表于 2024-12-9 08:27:28

Stubborn 发表于 2024-12-6 17:34
如果有需求计算重复的时间段,我认为,至少23:00 - 1:00 这种时间段不合理。因为跨越天数,你问题表达的重 ...

好久不见了哈
页: [1]
查看完整版本: 如何计算时差