将年 - 周转换为日期,其中一周有该月的最大天数

时间:2018-05-03 15:19:07

标签: python datetime

让我解释一下,我试图改变2017年的第5周; 201705年属于二月,因为它属于一年中的第五周。

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

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

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

但是有没有办法可以将日期转换为2月,同样属于一个月的所有周数转换为该月

编辑: 我所追求的是,​​如果周数是5,那么它的2月,如果是9,那么它是3月 - 有点周 - 月的映射,但除了改变年份之外,我还没有找到任何方法做到这一点 - 每周格式化

2 个答案:

答案 0 :(得分:0)

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

我对你为什么期待二月而感到有点困惑,因为01-30实际上是一月份。

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

答案 1 :(得分:0)

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

>>> 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)
>>> 

您的里程可能会有所不同 今年我还没有进行数周的测试。