gpt4 book ai didi

python - 日期时间之间有多少 "premium"小时?

转载 作者:行者123 更新时间:2023-12-01 02:28:12 26 4
gpt4 key购买 nike

这是我们面临的一个更大问题的一部分,但目前的问题是根据这些时间在一天中的时间将两个日期时间之间的时间分成两个费率。这是相当随意的,但我们将上午 7 点至下午 7 点视为正常时间,而将相反的 12 小时视为优质时间。

因此,对于任何给定的日期时间对,我们需要对它们进行降级,以便我们知道该期间有多少正常时间或多少小时。几个例子:

如果我们接下来的 24 小时,我预计准确的时间间隔为 12 小时。

> start = datetime.datetime.now()
> end = start + datetime.timedelta(1)
> split_hours(start, end)
(datetime.timedelta(0, 43200), datetime.timedelta(0, 43200))

如果我们在接下来的 12 小时内,即 20:26,我预计 1 小时 26 分的正常费率和 10 小时 34 分的溢价费率:

> start = datetime.datetime(2017, 11, 6, 20, 26, 0)
> end = start + datetime.timedelta(hours=12)
> split_hours(start, end)
(datetime.timedelta(0, 5160), datetime.timedelta(0, 38040))

“我该怎么做?”这是我的问题。对不起。我一整天都在思考这个问题,但只得到了以下餐巾纸算法:

  • 将范围拆分为不同日期的日期时间范围(如何?!),并且对于每个范围:
    • 将上午 7 点之前和晚上 7 点之后的时间算作额外费用
    • 计算上午 7 点到晚上 7 点之间的时间
  • 将它们合计起来。

但即使在那里我也不知道如何拆分事情。

还有一个自然的扩展——我几乎肯定会在某个时候实现——这也将周末时间评为优质时间。如果我可以分割时间(就像在我的餐巾纸算法中一样),那么就很容易坚持下去,但我仍然不喜欢那个“代码”有多么笨拙)。如果你的答案也涵盖了这一点,你就可以生我的长子。好吧,不,你可以获得赏金什么的。

我在 Python 中执行此操作,没有任何真正的库限制(例如 Pandas JustDos™),但如果您想提交原始 C 或伪代码答案,我确信我能够阅读它.

最佳答案

我们可以:

  1. 生成开始和结束之间的日期时间范围
  2. 循环该范围并计算正常秒数(长度 - 正常=溢价)

这是代码:

import datetime

def split_hours(start, end):

# Total seconds
length = int((end-start).total_seconds())

# Generator with datetime objects
s = (start + datetime.timedelta(seconds=i) for i in range(length))

# Calculate normal and premium
# normal when hour > 7 AM, smaller than 7 PM and weekday not sat,sun
normal = sum(7 <= i.hour < 19 and i.weekday() not in [5,6] for i in s)
premium = length - normal

d = dict(normal=normal,
premium=premium,
total=dict(h=length/3600,m=length/60,s=length))

return d

现在我们可以做一些测试:

start = datetime.datetime.now()
end1 = start + datetime.timedelta(hours=12)
end2 = start + datetime.timedelta(days=1)
end3 = start + datetime.timedelta(days=24)

print(split_hours(start,end1))
print(split_hours(start,end2))
print(split_hours(start,end3))

返回:

# 12 hours
{'total': {'h': 12.0, 's': 43200, 'm': 720.0}, 'premium': 26131, 'normal': 17069}

# 1 days / 24 hours
{'total': {'h': 24.0, 's': 86400, 'm': 1440.0}, 'premium': 43200, 'normal': 43200}

# 7 days
{'total': {'h': 168.0, 's': 604800, 'm': 10080.0}, 'premium': 388800, 'normal': 216000}

关于python - 日期时间之间有多少 "premium"小时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47145703/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com