【发布时间】:2018-10-15 20:58:32
【问题描述】:
我有一个列表,其中给出了给定年份的工作日(1-7 就像周一到周日)和周数。我需要将该信息转换为给定日期。
所以,我写了一个简单的脚本,它接受三个参数: 1年 2. 工作日 3. 周数
然后找出日期。
我的脚本基本上会遍历给定年份的所有日子,并创建一个日期时间对象,然后我在其中提取 isocalendar()[1] 以将其与周数进行比较。
我发现如果我输入 2017 7 52 我会得到两个输出!
本质上是这样的:
#!/Library/Frameworks/Python.framework/Versions/3.7/bin/python3
import datetime
def print_dt(year, month, day):
dt = datetime.date(year, month, day)
print("%d-%d-%d (%d) -> week# %d" % (year, month, day, dt.weekday(), dt.isocalendar()[1]))
print_dt(2017, 1, 1)
print_dt(2017, 12, 31)
而且输出是一样的:
Anibals-iMac:RPEG anibal$ ./findDate-fixed-date.py
2017-1-1 (6) -> week# 52
2017-12-31 (6) -> week# 52
这怎么可能?这意味着 2017 年的第 52 周有两天 #6,即两个不同的星期日。这种情况导致我的脚本出现问题。
知道如何解决这个问题吗?
我最初的问题是我在 YYYYMMDD 中给出了事件,我需要按周# 按年对它们进行分组。因此,我可以说在 2017 年第 4 周发生了 X 次事件。对于上述情况,当它下降到第 52 周时它不起作用,因为对于 YYYYMMDD 有多个解决方案。
【问题讨论】:
-
看起来像在给定年份的开始和结束附近的 ISO 周可以包括上一个或下一个的天数。仔细查看插图shown here(当然还要阅读相关文字)。
标签: python