V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Jolly23
V2EX  ›  问与答

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

  •  
  •   Jolly23 · 2016-07-24 09:44:37 +08:00 · 4802 次点击
    这是一个创建于 3077 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    7 条回复    2016-07-24 13:25:37 +08:00
    cyr1l
        2
    cyr1l  
       2016-07-24 10:10:49 +08:00 via iPhone
    年是已知的吧?你只需要求月日。
    Jolly23
        3
    Jolly23  
    OP
       2016-07-24 10:11:33 +08:00
    @cyr1l 是的
    SuperMild
        4
    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
        5
    sunus  
       2016-07-24 12:08:33 +08:00
    可以用 isoweek 这个库 https://pypi.python.org/pypi/isoweek/
    crazykuma
        6
    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
        7
    Jolly23  
    OP
       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)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1893 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 16:16 · PVG 00:16 · LAX 08:16 · JFK 11:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.