gpt4 book ai didi

python - 找到最近的季度末约会?

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

我正在尝试查找最接近给定日期的季度末:例如2014 年 5 月 27 日的最近季度末为 2014 年 6 月 30 日,2013 年 2 月 2 日的最近季度末为 2012 年 12 月 31 日。我有以下内容,但它没有给我 2015 年 8 月 15 日这样的日期的预期输出:

import datetime

tester = datetime.datetime(2015, 8, 15)

calendar_date = datetime.datetime(tester.year - 1, 12, 31)
for dd in [(3, 31), (6, 30), (9, 30), (12, 31)]:
diff = abs(datetime.datetime(tester.year, dd[0], dd[1]) - tester)
if diff.days <= 45:
calendar_date = datetime.datetime(tester.year, dd[0], dd[1])
break

print tester, calendar_date

我通过假设每个季度为 90 天进行了简化,因此在 45 天时取其中的 1/2(有更好的方法吗???),但显然这不适用于 2015 年 8 月 16 日,因为它打印:

2015-08-15 00:00:00 2014-12-31 00:00:00

我预计2015-09-30 00:00:00

最佳答案

datetime.timedelta可能为负且 diff.days <= 45对于负时间增量始终为真,因此结果不正确。

您已经有了一个简单的解决方案,并且候选人已经就位。这些是

  1. 目标日期前的最后一个季度
  2. 今年所有四个季度

datetime.timedelta对象具有相对比较运算符,即它们形成全序,这意味着存在最小值。正如 Padraic Cunningham 的评论中所指出的,您希望候选人与目标日期的最小绝对距离:

def get_closest_quarter(target):
# candidate list, nicely enough none of these
# are in February, so the month lengths are fixed
candidates = [
datetime.date(target.year - 1, 12, 31),
datetime.date(target.year, 3, 31),
datetime.date(target.year, 6, 30),
datetime.date(target.year, 9, 30),
datetime.date(target.year, 12, 31),
]
# take the minimum according to the absolute distance to
# the target date.
return min(candidates, key=lambda d: abs(target - d))

这里的代码使用datetime.date为了简单起见,但应该很容易推广到 datetime.datetime如果需要的话。

关于python - 找到最近的季度末约会?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32444638/

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