当前位置:  开发笔记 > 编程语言 > 正文

在Python中,如何找到给定周的第一个星期一的日期?

如何解决《在Python中,如何找到给定周的第一个星期一的日期?》经验,为你挑选了4个好方法。

如果我有一个特定的周数(例如51)和给定的一年(例如2008年),我如何找到同一周的第一个星期一的日期?

非常感谢



1> Robert Gambl..:
>>> import time
>>> time.asctime(time.strptime('2008 50 1', '%Y %W %w'))
'Mon Dec 15 00:00:00 2008'

假设你一周的第一天是星期一,请使用%U而不是%W在你一周的第一天是星期天.有关详细信息,请参阅strptime的文档.

更新:固定周数.该%W指令从0开始,因此第51周将输入50,而不是51.


请注意,此函数无法与isocalendar()一起正常工作.例如,2013年第一周从12月31日开始(这是正确的),但2012-1从12月26日开始(应该是1月2日).这是因为%W使用自己的周数实现,而isocalendar()使用ISO标准.使用下面的Vaidas方法获得更准确的方法.

2> Vaidas K...:

PEZ和Gerald Kaszuba的解决方案工作假设1月1日将始终在给定年份的第一周.这个假设对于ISO日历是不正确的,请参阅Python的文档以供参考.例如,在ISO日历中,2010年第1周实际上从1月4日开始,2010年1月1日是在2009年第53周.与ISO日历兼容的解决方案:

from datetime import date, timedelta

def week_start_date(year, week):
    d = date(year, 1, 1)    
    delta_days = d.isoweekday() - 1
    delta_weeks = week
    if year == d.isocalendar()[0]:
        delta_weeks -= 1
    delta = timedelta(days=-delta_days, weeks=delta_weeks)
    return d + delta


正如ralphje对已接受答案的评论所述,%W使用自己的周数实现,而不是ISO标准.另请注意,%W基于0.

3> minkwe..:
from datetime import date, timedelta

def first_monday(year, week):
    d = date(year, 1, 4)  # The Jan 4th must be in week 1  according to ISO
    return d + timedelta(weeks=(week-1), days=-d.weekday())



4> gak..:

这似乎有效,假设第一周可以在去年的某一天有一个星期一下降.

from datetime import date, timedelta

def get_first_dow(year, week):
    d = date(year, 1, 1)
    d = d - timedelta(d.weekday())
    dlt = timedelta(days = (week - 1) * 7)
    return d + dlt

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有