8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

根据周数获取日期

riffnl 1月前

44 0

请问我的代码有什么问题:import datetimed = \'2013-W26\'r = datetime.datetime.strptime(d, \'%YW%W\')print(r) Display \'2013-01-01 00:00:00\',谢谢。

请问我的代码有什么问题:

import datetime
d = "2013-W26"
r = datetime.datetime.strptime(d, "%Y-W%W")
print(r)

显示\'2013-01-01 00:00:00\',谢谢。

帖子版权声明 1、本帖标题:根据周数获取日期
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由riffnl在本站《datetime》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 这是一个 方便的功能 ,包括零周问题。

  • tiao 1月前 0 只看Ta
    引用 3

    对我有用的另一个解决方案是接受系列数据,而不是 strptime 仅接受单个字符串值:

    #fw_to_date
    import datetime
    import pandas as pd
    
    # fw is input in format 'YYYY-WW'
    # Add weekday number to string 1 = Monday
    fw = fw + '-1'
    # dt is output column 
    # Use %G-%V-%w if input is in ISO format
    dt = pd.to_datetime(fw, format='%Y-%W-%w', errors='coerce')
    
  • 如果您有每年的周数,只需将周数添加到一年的第一天即可。

    >>> 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)
    
  • 如果有人正在寻找一个简单的函数,从周数返回所有工作日(Mo-Fr)的日期,请考虑这个(基于 接受的答案 )

    import datetime
    
    def weeknum_to_dates(weeknum):
        return [datetime.datetime.strptime("2021-W"+ str(weeknum) + str(x), "%Y-W%W-%w").strftime('%d.%m.%Y') for x in range(-5,0)]
    
    weeknum_to_dates(37)
    

    输出:

    ['17.09.2021', '16.09.2021', '15.09.2021', '14.09.2021', '13.09.2021']
    
  • @Senthikumar C 应该像下面这样 res = datetime.datetime.strptime(\'2018 W30 w1\', \'%YW%W w%w\')

  • import datetime
    res = datetime.datetime.strptime("2018 W30 w1", "%Y %W w%w")
    print res
    

    添加 1 作为星期几将得到准确的当前星期开始时间。添加 timedelta(days=6) 将得到周末结束时间。

    datetime.datetime(2018, 7, 23)
    
  • 为了完成其他答案 - 如果您使用 ISO 周数,则此字符串是合适的(获取给定 ISO 周数的星期一):

    import datetime
    d = '2013-W26'
    r = datetime.datetime.strptime(d + '-1', '%G-W%V-%u')
    print(r)
    

    %G , %V , %u 是 的 ISO 等效版本 %Y , %W , %w ,因此输出:

    2013-06-24 00:00:00
    

    适用于 Python 3.6+;来自 docs .

  • 对于 52/2023,它给出的是星期一=2023-12-26,这是错误的年份。

  • 在 Python 3.8 中有一个方便的 datetime.date.fromisocalendar

    >>> from datetime import date
    >>> date.fromisocalendar(2020, 1, 1)  # (year, week, day of week)
    datetime.date(2019, 12, 30, 0, 0)
    

    在较旧的 Python 版本(3.7-)中,计算可以使用以下信息来 datetime.date.isocalendar 找出符合 ISO8601 标准的周数:

    from datetime import date, timedelta
    
    def monday_of_calenderweek(year, week):
        first = date(year, 1, 1)
        base = 1 if first.isocalendar()[1] == 1 else 8
        return first + timedelta(days=base - first.isocalendar()[2] + 7 * (week - 1))
    

    两者均可 datetime.datetime .

  • @ozw1z5rd:如果这是您的应用程序的问题,您需要对这些年份进行特殊处理;如果 d.endswith('-W0') 和 r.day == 7:引发 ValueError('无效的日期字符串,{} 中没有第 0 周'.format(r.year))

  • @ozw1z5rd:这是因为 2018 年没有第 0 周。第 0 周是一年中第一个星期一之前的部分星期;2018 年的第一个星期一是 1 月 1 日。换句话说,您的输入字符串是这里的问题,而不是技术问题,Python 已进行错误更正,将 W0 解释为 W1。

  • 不起作用。datetime.datetime.strptime(\'2018-W0-0\', \'%YW%W-%w\') == datetime.datetime.strptime(\'2018-W1-0\', \'%YW%W-%w\') --> \'2018-01-07 00:00:00\'。2018 年第一周和第二周的开始日期相同。

  • 仅周数不足以生成日期;您还需要星期几。添加默认值:

    import datetime
    d = "2013-W26"
    r = datetime.datetime.strptime(d + '-1', "%Y-W%W-%w")
    print(r)
    

    模式 -1 and -%w 告诉解析器选择该周的星期一。输出如下:

    2013-07-01 00:00:00
    

    %W 使用星期一作为一周的第一天。虽然你可以选择自己的星期几,但如果你偏离这个星期几,你可能会得到意想不到的结果。

    请参阅 strftime() and strptime() behaviour strftime() 和 strptime() 行为

    与方法一起使用时 strptime() %U %W 用于指定星期几和年份的计算。

    请注意,如果您的周数是 ISO 周日期 ,则需要使用 %G-W%V-%u !这些指令需要 Python 3.6 或更新版本。

返回
作者最近主题: