所以我是python的初学者,并且一直在使用datetime,time和timedelta库 . 我正在尝试创建一段代码,从大约两个月前开始给我约会(exact_two_months_date)(今天无论如何) . 问题是,我想找到约会日期 . 两个月前,并在该周的星期一开始实际的start_date . 因此从理论上讲,实际开始日期不会恰好是两个月前 . 这将是从两个月前的星期一开始的一周 .
Example pseudocode:
today = '20150425' ## '%Y%m%d' ... Saturday
exact_two_months_date = '20150225' ## EXACTLY two months ago ... Wednesday
start_date = '20150223' ## this is the Monday of that week two months ago
那么如何找到上面的'start_date'?如果恰好两个月前的那一天是在周六或周日开始,那么我只想去下周一 . 希望这是明确的,也是有道理的...一旦我找到开始日期,我想逐日(仅工作日)增加到'today' .
感谢任何反馈,谢谢 .
4 回答
Calculating with dates using python-dateutil
如果依赖于第三方包是一个选项,那么☞ python-dateutil提供了一种方便的方法来计算日期 .
浏览☞ relativedelta的文档以查看大量支持的参数 . 一个包需要对日期进行的计算越多,像
dateutil
这样的辅助模块就越能证明它的依赖性 . 有关它所提供的内容的更多灵感,请参阅☞ examples page .Quick run-through:
Getting the Monday with weekday()
一旦我们从两个月前的变量
two_m_ago
中得到日期,我们就从中减去weekday()
的索引 . 这个索引是周一的0
,一直到周日的6
. 如果two_m_ago
已经是星期一,那么减去0
将不会导致任何更改 .这样的事情对你有用吗?
老实说,我觉得和_974820一起工作是我经常做的最困难的事情而且我犯了很多错误,所以我要解决这个问题并展示我经常遇到的一些失误 . 开始 .
两个限制:1)两个月前的日期,2)该周的星期一
Date Two Months Ago
好的,所以Python的
datetime
库有一个名为replace
的有用方法,这似乎对它有帮助:但是等一下:负面数字怎么样?这不起作用:
所以有两种解决方案:
1)我可以构建一个向前或向后循环的1-12范围,或者
2)为了找到前两个月,我只能用我所在月份的
1st
日替换我日期的day
部分,然后返回1个月到上个月,然后用上一个月的那一天替换上个月的那一天 . 我想要的一天 .(如果你考虑一下,你会发现,如果我在一个月的第31天降落,那么其中任何一个都可能会出现错误,例如 . 这是因为这很困难 . )
好吧,让我们说我们已经接近了,我们需要包括一些错误检查,以确保我们想要的那一天是我们登陆的月份内的有效日期 . 最终,问题是“两个月前”当我们大声说出来时,意味着比我们想象的更多 .
接下来,我们将对第二个问题进行分析:如何到达那周的星期一?
那么,
datetime
对象有一个工作日方法,所以这部分不应该太难和here's a nice SO answer on how to do that .简单版本是:使用工作日整数的差异来计算使用
datetime.timedelta(days=days_difference)
返回的天数 .外卖:使用
datetime
可能很难 .Python中的日期操作非常令人费解 . 使用arrow软件包可以节省大量时间,从而大大简化了这些操作 .
首先安装它
现在你的问题:
输出:
请注意,各种格式,时区等现在都是透明的,您只需要依赖一个包 .