《Python Cookbook 3rd》笔记(3.12):基本的日期与时间转换
基本的日期与时间转换
问题
你需要执行简单的时间转换,比如天到秒,小时到分钟等的转换。
解法
为了执行不同时间单位的转换和计算,请使用 datetime 模块。比如,为了表示一个时间段,可以创建一个 timedelta 实例,就像下面这样:
>>> from datetime import timedelta
>>> a = timedelta(days=2, hours=6)
>>> b = timedelta(hours=4.5)
>>> c = a + b
>>> c.days
2
>>> c.seconds
37800
>>> c.seconds / 3600
10.5
>>> c.total_seconds() / 3600
58.5
>>>
如果你想表示指定的日期和时间,先创建一个 datetime 实例然后使用标准的数学运算来操作它们。比如:
>>> from datetime import datetime
>>> a = datetime(2012, 9, 23)
>>> print(a + timedelta(days=10))
2012-10-03 00:00:00
>>>
>>> b = datetime(2012, 12, 21)
>>> d = b - a
>>> d.days
89
>>> now = datetime.today()
>>> print(now)
2012-12-21 14:54:43.094063
>>> print(now + timedelta(minutes=10))
2012-12-21 15:04:43.094063
>>>
在计算的时候,需要注意的是 datetime 会自动处理闰年。比如:
>>> a = datetime(2012, 3, 1)
>>> b = datetime(2012, 2, 28)
>>> a - b
datetime.timedelta(2)
>>> (a - b).days
2
>>> c = datetime(2013, 3, 1)
>>> d = datetime(2013, 2, 28)
>>> (c - d).days
1
>>>
讨论
对大多数基本的日期和时间处理问题, datetime 模块以及足够了。如果你需要执行更加复杂的日期操作,比如处理时区,模糊时间范围,节假日计算等等,可以考虑使用 dateutil 模块
许多类似的时间计算可以使用 dateutil.relativedelta() 函数代替。但是,有一点需要注意的就是,它会在处理月份 (还有它们的天数差距) 的时候填充间隙。看例子最清楚:
>>> a = datetime(2012, 9, 23)
>>> a + timedelta(months=1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'months' is an invalid keyword argument for this function
>>>
>>> from dateutil.relativedelta import relativedelta
>>> a + relativedelta(months=+1)
datetime.datetime(2012, 10, 23, 0, 0)
>>> a + relativedelta(months=+4)
datetime.datetime(2013, 1, 23, 0, 0)
>>>
>>> # Time between two dates
>>> b = datetime(2012, 12, 21)
>>> d = b - a
>>> d
datetime.timedelta(89)
>>> d = relativedelta(b, a)
>>> d
relativedelta(months=+2, days=+28)
>>> d.months
2
>>> d.days
28
>>>
《Python Cookbook 3rd》笔记(3.12):基本的日期与时间转换相关推荐
- 《Python Cookbook 3rd》笔记(1.4):查找最大或最小的N个元素
<Python Cookbook 3rd>1.4:查找最大或最小的N个元素 问题 怎样从一个集合中获得最大或者最小的N个元素列表? 解法 heapq 模块有两个函数:nlargest()和 ...
- 《Python Cookbook 3rd》笔记汇总
文章目录 一.数据结构 二.字符串和文本 三.数字.日期和时间 四.迭代器与生成器 五.文件与IO 一.数据结构 标题 关键词 1.1:拆分序列后赋值给多个变量 可迭代对象.拆分赋值 1.2:拆分任意 ...
- Python Cookbook 3rd Edition Documentation
Python Cookbook 3rd Edition Documentation 文章目录 第一章:数据结构和算法 1.1 解压序列赋值给多个变量 问题 解决方案 讨论 1.2 解压可迭代对象赋值给 ...
- Machine Learning with Python Cookbook 学习笔记 第8章
Chapter 8. Handling Images 前言 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放 ...
- Machine Learning with Python Cookbook 学习笔记 第9章
Chapter 9. Dimensionality Reduction Using Feature Extraction 前言 本笔记是针对人工智能典型算法的课程中Machine Learning w ...
- 《Python cookbook》笔记二
<Python cookbook>笔记二 第二章 字符串和文本 -使用多个界定符分割字符串- 你需要将一个字符串分割为多个字段,但是分隔符 (还有周围的空格) 并不是固定 的. # str ...
- Machine Learning with Python Cookbook 学习笔记 第6章
Chapter 6. Handling Text 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放在代码压缩 ...
- Study_microblog笔记Part 13--日期与时间
UTC是最常用的统一时区,并且在datetime类中也受到支持,因此在系统会使用UTC时区时间.从服务器的角度来说,将时间戳标准化为UTC,意义重大,但这会为用户带来可用性问题. 对处于不同时区的用户 ...
- 《Python Cookbook 3rd》笔记(3.14):计算当前月份的日期范围
计算当前月份的日期范围 问题 你的代码需要在当前月份中循环每一天,想找到一个计算这个日期范围的高效方法. 解法 在这样的日期上循环并需要事先构造一个包含所有日期的列表.你可以先计算出开始日期和结束日期 ...
最新文章
- Java:代码验证 StringBuffer 线程安全,StringBuilder 非线程安全
- CSS样式:覆盖规则
- TMD 之后,再无 BAT? | 畅言
- Beyond Compare 怎么新增与卸载文件格式
- 设计模式——命令模式
- [spark]Spark2.4.6用put写入写入Hbase1.3.1
- 启用Mac系统读写NFTS磁盘
- python、MongoDB安装
- ai带来的革命_AI革命就在这里。 这与我们预期的不同。
- 51单片机倒计时蜂鸣器c语言,基于51单片机的倒计时器设计
- 使用Liquid实现简单的数据交换
- Cheat Enginee(CE)自带教程使用指南
- excel随机数_利用excel快速凭空制造大量随机数据?想要制造什么数据都可以
- 【ROS实践入门(九)ROS编译ORB-SLAM2运行】
- NAIPC2016 I. Tourists【LCA】
- java数组乱码_Java 乱码问题
- 计算机英语写一封邮件给汤姆作文,英语作文带翻译写一封电子邮件
- 机器视觉(七):图像分割
- Jmeter如何进行接口测试-实操
- 程序员端午过了回杭州的一点思考