将周数转换为日期

Ame*_*ina 4 python datetime

假设我有一个特定年份的周数(例如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)
Run Code Online (Sandbox Code Playgroud)

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

Mal*_*och 6

关于 strptime \ strftime 的所有信息:

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

mytime.strftime('%U') #for W\C Monday
mytime.strftime('%W') #for W\C Sunday
Run Code Online (Sandbox Code Playgroud)

抱歉走错路了

from datetime import datetime
mytime=datetime.strptime('2012W6 MON'. '%YW%U %a')
Run Code Online (Sandbox Code Playgroud)

Strptime 需要查看年份和工作日才能执行此操作。我假设您有每周数据,因此只需在字符串末尾添加“mon”即可。享受


Ale*_*ton 6

您可以将数据输入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'
Run Code Online (Sandbox Code Playgroud)

编辑: 要将其转换为datetime.date对象:

>>> datetime.datetime.fromtimestamp(time.mktime(atime)).date()
datetime.date(2014, 2, 10)
Run Code Online (Sandbox Code Playgroud)

  • 可悲的是,对于 Python 2.7,最后一步似乎引发了 `TypeError: argument must be 9-item sequence, not str` ... 知道吗? (2认同)

Mod*_*ins 5

一个简单的函数,可以在给定日期的情况下获取星期一。

def get_monday(dte):
    return dte - datetime.timedelta(days = dte.weekday())
Run Code Online (Sandbox Code Playgroud)

一些示例输出:

>>> get_monday(date1)
datetime.date(2013, 12, 30)
>>> get_monday(date2)
datetime.date(2014, 12, 29)
Run Code Online (Sandbox Code Playgroud)

在循环中调用此函数。