Python 如何计算当前时间减少或增加一个月
问题
今天在之前的代码中发现了一个bug,有个计算当前时间减少一个月的函数,其报出下面的异常信息:
ValueError: day is out of range for month
看一下代码:
import datatime
def _last_month(now_time):last_month = now_time.month - 1last_year = now_time.yearif last_month == 0:last_month = 12last_year -= 1month_time = datetime.datetime(month=last_month, year=last_year, day=now_time.day)return month_time
原因
问题出现在day=now_time.day上。后来想了一下,发现问题原因是3月30日减少一个月是2月30日,而2月没有30日,所以就抛出了上面的异常信息。
解决办法
对于日期操作,网上的写法都不太一样,而且不确定存在什么bug。日期函数是靠时间来验证的,没准一年以后就出现了(我这个bug是在指定的3月29日以后才能出现,神奇不:D)。
所以我找了一个现有的日期扩展库,希望别人已经踩过大部分坑了。代码如下
import datetime
from dateutil.relativedelta import relativedeltaif __name__ == "__main__":print(datetime.date.today() - relativedelta(months=+1))
可以看出,主要是使用relativedelta类。初始化参数months是月的差异。
安装这个库也很简单,执行命令pip install python-dateutil
。
源码分析
代码在
https://github.com/dateutil/dateutil/blob/master/dateutil/relativedelta.py
判断应该是在354行开始:
if self.months:assert 1 <= abs(self.months) <= 12month += self.monthsif month > 12:year += 1month -= 12elif month < 1:year -= 1month += 12day = min(calendar.monthrange(year, month)[1],self.day or other.day)
参考:
https://dateutil.readthedocs.io/en/stable/
https://github.com/dateutil/dateutil
@完
转载于:https://www.cnblogs.com/zhangqunshi/p/6641167.html
Python 如何计算当前时间减少或增加一个月相关推荐
- python datetime 加一个月_Python 如何计算当前时间减少或增加一个月
问题 今天在之前的代码中发现了一个bug,有个计算当前时间减少一个月的函数,其报出下面的异常信息: ValueError: day is out of range for month 看一下代码: i ...
- python 加一个月 日期,有没有一种简单的方法可以在Python中将datetime对象增加一个月?...
本问题已经有最佳答案,请猛点这里访问. 所以我试图找到一种方法,将日期时间对象增加一个月.然而,根据这个问题,这似乎不是那么简单. 我希望有这样的事情: import datetime as dt n ...
- php date 加月_php如何使时间增加一个月
php如何使时间增加一个月 使用php的strtotime()函数 实例:比如现在时间5261是"2010-10-06",加4102一个月.1653echo date(" ...
- java new date 减一天_java日期增加一个月或减少一天
我们在java开发中,遇到一个Date类型的日期,希望在它基础上增加一个月,赋值给另外一个变量,这个时候该如何处理 /**** * 传入具体日期 ,返回具体日期增加一个月. * @param date ...
- python入门到精通需要学多久-Python从入门到精通只需要一个月就够了!
对于许多未曾涉足计算机编程的领域「小白」来说,深入地掌握 Python 看似是一件十分困难的事.其实,只要掌握了科学的学习方法并制定了合理的学习计划,Python 从 入门到精通只需要一个月就够了! ...
- python从入门到精通需要多久-Python从入门到精通只需要一个月就够了!
对于许多未曾涉足计算机编程的领域「小白」来说,深入地掌握 Python 看似是一件十分困难的事.其实,只要掌握了科学的学习方法并制定了合理的学习计划,Python 从 入门到精通只需要一个月就够了! ...
- python入门到精通需要学多久-Python零基础入门到精通:一个月就够了
毫无疑问,Python是目前最热门的编程语言之一.对于许多从未参与过计算机编程的"小白"来说,深入掌握Python似乎非常困难.事实上,只要你掌握了科学的学习方法,制定了合理的学习 ...
- 江苏python二级考试时间,江苏2021年3月计算机二级考试报名时间安排
2021年3月江苏全国计算机二级考试报名时间已经公布.以下是小编为大家整理的2021年3月江苏计算机二级考试报名时间相关内容,希望对大家有所参考与帮助. 江苏2021年3月计算机二级考试报名时间 20 ...
- java当前日期加一个月_用代码实现使当前日期 Date型的数据增加一个月
展开全部 Calendar cal = Calendar.getInstance(); //下面的就是把当前日期加一个月 cal.add(Calendar.MONTH, 1) SimpleDateFo ...
最新文章
- python程序设计祁瑞华答案_【单选题】有六个元素 6 , 5 , 4 , 3 , 2 , 1 的顺序进栈,问下列哪一个不是合法的出栈序列? (2.0分)...
- 关于64位 MS SQL 导入导出 Oracle 引发 ORA-06413 的解决方法
- SAP PR 转 PO
- Unity进阶技巧 - 从文件读取游戏数据
- Hystrix简介及简单代码示例
- 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波9 - 直方图处理 - 直方图匹配(规定化)灰度图像,彩色图像都适用
- 计算机更新阶段,较旧的计算机开始自动升级到Windows10 2004版
- php/eq,thinkphp中eq标签的使用
- 推荐给初学LSTM或者懂个大概却不完全懂的人
- Google搜索简单介绍
- 高中计算机思维导图,为高中信息技术教学插上思维导图翅膀
- 菠萝狗四足机器人使用手册
- c语言转换字符类型,C语言基础之数据类型转换
- google talk
- Matlab之inv函数
- linux通过文件修改密码,如何通过Linux系统来修改密码
- 关于pip安装gap_statistic
- Python爬虫:调用百度翻译接口实现中英翻译功能
- 暴力破解工具——Hydra使用教程
- springcloud篇】九. springcloud项目 三 首页,我的信息,添加好友及好友信息处理