通过 python,如何给定一个周数和星期,算出日期?

2016-07-24 09:44:37 +08:00
 Jolly23

如题: 怎么样才能提供一个 周数(全年当中的第几周)和星期,来计算出这个日期(年月日)

4777 次点击
所在节点    问与答
7 条回复
hahastudio
2016-07-24 10:05:43 +08:00
cyr1l
2016-07-24 10:10:49 +08:00
年是已知的吧?你只需要求月日。
Jolly23
2016-07-24 10:11:33 +08:00
@cyr1l 是的
SuperMild
2016-07-24 10:35:51 +08:00
- 用闰年公式算出是否闰年,这样每个月有多少天就确定了

- 使用计算星期几的公式(例如蔡勒公式, w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1 )计算出当年 1 月 1 日是星期几

- 利用上述两个数据推算即可
sunus
2016-07-24 12:08:33 +08:00
可以用 isoweek 这个库 https://pypi.python.org/pypi/isoweek/
crazykuma
2016-07-24 13:19:36 +08:00
pandas 的 dateoffset 就可以做到

from pandas.tseries.offsets import *
d=datetime(2016,1,1)
d+Week(2,weekday=0) #2 周后的星期一
Jolly23
2016-07-24 13:25:37 +08:00
做完了,感谢大家的帮助 @sunus @crazykuma @SuperMild @cyr1l @hahastudio

def iso_to_gregorian(iso_year, iso_week, iso_day):
fourth_jan = date(iso_year, 1, 4)
delta = timedelta(fourth_jan.isoweekday() - 1)
iso_year_start = fourth_jan - delta
year_start = iso_year_start
return year_start + timedelta(days=iso_day-1, weeks=iso_week-1)


def iso_to_date(iso_year, iso_week, iso_day):
return iso_to_gregorian(iso_year, iso_week, iso_day).strftime("%Y-%m-%d")

print iso_to_date(2016, 30, 3)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/294509

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX