将周数转换为日期



假设我有一个给定年份的周数(例如 2014 年的第 6 周)。

如何将其转换为该周开始的星期一的日期?

我想到的一个蛮力解决方案是遍历一年中的所有星期一:

date1 = datetime.date(1,1,2014)
date2 = datetime.date(12,31,2014)
def monday_range(date1,date2):
    while date1 < date2:
        if date1.weekday() == 0:
            yield date1
        date1 = date1 + timedelta(days=1)

并存储从一年中的第一个星期一到最后一个星期一的哈希值,但这不会这样做,因为一年的第一周可能不包含星期一。

您可以将

数据输入time.asctime() .

>>> import time
>>> week = 6
>>> year = 2014
>>> atime = time.asctime(time.strptime('{} {} 1'.format(year, week), '%Y %W %w'))
>>> atime
'Mon Feb 10 00:00:00 2014'

编辑:要将其转换为datetime.date对象,请执行以下操作:

>>> datetime.datetime.fromtimestamp(time.mktime(atime)).date()
datetime.date(2014, 2, 10)

所有关于 strptime \ strftime:

https://docs.python.org/2/library/datetime.html

mytime.strftime('%U') #for WC Monday
mytime.strftime('%W') #for WC Sunday

对不起,错了

from datetime import datetime
mytime=datetime.strptime('2012W6 MON'. '%YW%U %a')

Strptime需要同时查看年份和工作日才能执行此操作。我假设你有每周数据,所以只需在字符串末尾添加"mon"。享受

一个简单的函数,用于获取星期一,给定一个日期。

def get_monday(dte):
    return dte - datetime.timedelta(days = dte.weekday())

一些示例输出:

>>> get_monday(date1)
datetime.date(2013, 12, 30)
>>> get_monday(date2)
datetime.date(2014, 12, 29)

在循环中调用此函数。

我们可以将周数添加到一年的第一天。

>>> import datetime
>>> from dateutil.relativedelta import relativedelta
>>> week = 40
>>> year = 2019
>>> date = datetime.date(year,1,1)+relativedelta(weeks=+week)
>>> date
datetime.date(2019, 10, 8)

为了捎带并给出@anon582847382给出的不同版本的答案,如果您正在为其创建一个函数并且周数为"11-2023",您可以执行类似以下代码的操作:

import time
from datetime import datetime
def get_date_from_week_number(str_value):
    temp_str = time.asctime(time.strptime('{} {} 1'.format(str_value[3:7], str_value[0:2]), '%Y %W %w'))
    return datetime.strptime(temp_str, '%a %b %d %H:%M:%S %Y').date()

相关内容

  • 没有找到相关文章

最新更新