从python中的第周、月和日获取日期

Posted

技术标签:

【中文标题】从python中的第周、月和日获取日期【英文标题】:Get Date from week no, month, and day in python 【发布时间】:2019-08-06 05:31:30 【问题描述】:

我有一个日期变量:

temp_date = '2019-03-15'

我使用日期时间计算了week no. of the monthday

我得到了 week_no = 3day = 'Friday'

我想找出同一工作日组合的二月、一月和十二月的日期。

即:2 月、第 3 周、星期五的日期(Ans:2019-02-15)和

日期为 1 月,第 3 周,星期五(Ans:2019-01-18)。

日期为 12 月,第 3 周,周五(Ans: 2018-12-14)

我试过了:

feb= (current_date + timedelta(weeks=4)).strftime ('%d-%m-%Y')
jan= (current_date + timedelta(weeks=8)).strftime ('%d-%m-%Y')
dec= (current_date + timedelta(weeks=12)).strftime ('%d-%m-%Y')

我得到了正确的 1 月和 2 月日期,但 12 月我得到了 (2018-12-21)。

有更好的方法吗?

【问题讨论】:

这是您的实际代码吗?您正在添加 timedelta 而不是减去它。如果您在 2019 年 12 月之后,则应增加 40 周而不是减去 12 周。 如果您期望 2018-12-14 弹出,那么您的前提是错误的。如果您想要每月的第三个星期五,那么 12 月 21 日就是这样。第二个是 12 月 14 日,第一个是 12 月 7 日,之前的星期五是 11 月 30 日。 @GreenCloakGuy 你是说 11 月 30 日吗? @Selcuk ~你这个笨蛋,每个人都知道十一月不存在!~ *已修复 @GreenCloakGuy 我以为澳大利亚不存在,但我可能错了。 【参考方案1】:

这需要一段时间,使用 isoweek 和来自 calendarmonthrange 应该可以做到:

from isoweek import Week
import datetime
from calendar import monthrange

year = 2019
weekDay = 3
jan_date = Week(year, weekDay).friday()

Feb = monthrange(year, 2)[1]   # 28 Days for 2nd month
Mar = monthrange(year, 3)[1]   # 31 Days for 3rd month
Apr = monthrange(year, 4)[1]   # 30 Days for 4th month

feb_date = jan_date + datetime.timedelta(days=Feb)
mar_date = feb_date + datetime.timedelta(days=Mar)
apr_date = mar_date + datetime.timedelta(days=Apr)

print(feb_date)   # Feb 28 Days
print(mar_date)   # Mar 31 Days
print(apr_date)   # Apr 30 Days

输出

2019-02-15
2019-03-18
2019-04-17

注意:这是迭代完成的,将月数从 以前的。

【讨论】:

以上是关于从python中的第周、月和日获取日期的主要内容,如果未能解决你的问题,请参考以下文章

根据输入的月和日,计算出是本年的第几天。

按月和日过滤 django 日期时间字段的问题

如何将年、月和日列合并到单个日期时间列?

无论如何要更改日期输入字段中年、月和日分隔符 (/) 的占位符样式?

自定义日期RangeAttribute将在年,月和日的负值上返回异常

数据库读出出来的日期格式的不同,主要是月和日的1位和2位的显示