【问题标题】:Convert year-week to date condition to date where the week has max days for that month将年-周到日期条件转换为该周该月的最大天数的日期
【发布时间】:2018-05-04 01:35:16
【问题描述】:

让我解释一下,我正在尝试转换 2017 年的第 5 周; 201705 到属于 2 月的日期,因为该日期属于一年中的第 5 周。

到目前为止,我已经能够将自定义日期格式转换为日期,如下所示:

import datetime 
d = '201705'
dt = datetime.datetime.strptime(d+'1', '%Y%W%w')

然后输出,2017-01-30 00:00:00

但是有没有办法可以将日期转换为二月,并且类似地,属于一个月的所有周数都会转换为该月

编辑: 我所追求的是,​​如果周数是 5 则为 2 月,如果为 9 则为 3 月 - 类似于周月映射,但除了将年周更改为 dateformat

【问题讨论】:

  • 01-30 是一月而不是二月
  • 这就是我所追求的,如果是第 5 周,则为 2 月,如果为 9 日,则为 3 月 - 但有没有办法做到这一点?
  • 我不确定我是否足够理解你的问题:(
  • 我并不是要挑剔这种情况,但根据timeanddate.com/calendar/?country=1&year=2017,第 5 周是在一月份,而不是二月份
  • 是的@NathanBlaine 同意,但我们只能通过这种方式将日期转换为日期,有没有办法可以找到每年每个月有多少周,例如 2017 年的一月有5 周,例如 2 月有 5 周,然后 201710 是 2 月而不是 3 月。我知道这是一个奇怪的要求,但是......

标签: python datetime


【解决方案1】:
import datetime 
d = '201705'
dt = datetime.datetime.strptime(d+'1', '%Y%W%w')
month_from_date = dt.strftime("%B")
print(dt)
print(month_from_date)

将输出:

2017-01-30 00:00:00
January

我有点困惑,为什么你期待 2 月,因为 01-30 实际上是 1 月。

您可以找到更多格式信息here

【讨论】:

    【解决方案2】:

    对我的评论的快速测试,关于选择周日作为任意工作日而不是周一。

    >>> import datetime
    >>> d1=['201205','201305','201605','201705','201805','201905','202005','202105','202205','202305']
    >>> d2=['201209','201309','201609','201709','201809','201909','202009','202109','202209','202309']
    >>> for dat in d1:
    ...  datetime.datetime.strptime(dat+ '0','%Y%W%w')
    ... 
    datetime.datetime(2012, 2, 5, 0, 0)
    datetime.datetime(2013, 2, 10, 0, 0)
    datetime.datetime(2016, 2, 7, 0, 0)
    datetime.datetime(2017, 2, 5, 0, 0)
    datetime.datetime(2018, 2, 4, 0, 0)
    datetime.datetime(2019, 2, 10, 0, 0)
    datetime.datetime(2020, 2, 9, 0, 0)
    datetime.datetime(2021, 2, 7, 0, 0)
    datetime.datetime(2022, 2, 6, 0, 0)
    datetime.datetime(2023, 2, 5, 0, 0)
    >>> for dat in d2:
    ...  datetime.datetime.strptime(dat+ '0','%Y%W%w')
    ... 
    datetime.datetime(2012, 3, 4, 0, 0)
    datetime.datetime(2013, 3, 10, 0, 0)
    datetime.datetime(2016, 3, 6, 0, 0)                                            
    datetime.datetime(2017, 3, 5, 0, 0)
    datetime.datetime(2018, 3, 4, 0, 0)
    datetime.datetime(2019, 3, 10, 0, 0)
    datetime.datetime(2020, 3, 8, 0, 0)
    datetime.datetime(2021, 3, 7, 0, 0)
    datetime.datetime(2022, 3, 6, 0, 0)
    datetime.datetime(2023, 3, 5, 0, 0)
    >>> 
    

    您的里程可能会有所不同。
    我已经有好几周没有测试过了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-14
      • 1970-01-01
      • 2018-03-22
      • 1970-01-01
      • 2012-09-06
      相关资源
      最近更新 更多