基本的日期与时间转换

问题

你需要执行简单的时间转换,比如天到秒,小时到分钟等的转换。

解法

为了执行不同时间单位的转换和计算,请使用 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):基本的日期与时间转换相关推荐

  1. 《Python Cookbook 3rd》笔记(1.4):查找最大或最小的N个元素

    <Python Cookbook 3rd>1.4:查找最大或最小的N个元素 问题 怎样从一个集合中获得最大或者最小的N个元素列表? 解法 heapq 模块有两个函数:nlargest()和 ...

  2. 《Python Cookbook 3rd》笔记汇总

    文章目录 一.数据结构 二.字符串和文本 三.数字.日期和时间 四.迭代器与生成器 五.文件与IO 一.数据结构 标题 关键词 1.1:拆分序列后赋值给多个变量 可迭代对象.拆分赋值 1.2:拆分任意 ...

  3. Python Cookbook 3rd Edition Documentation

    Python Cookbook 3rd Edition Documentation 文章目录 第一章:数据结构和算法 1.1 解压序列赋值给多个变量 问题 解决方案 讨论 1.2 解压可迭代对象赋值给 ...

  4. Machine Learning with Python Cookbook 学习笔记 第8章

    Chapter 8. Handling Images 前言 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放 ...

  5. Machine Learning with Python Cookbook 学习笔记 第9章

    Chapter 9. Dimensionality Reduction Using Feature Extraction 前言 本笔记是针对人工智能典型算法的课程中Machine Learning w ...

  6. 《Python cookbook》笔记二

    <Python cookbook>笔记二 第二章 字符串和文本 -使用多个界定符分割字符串- 你需要将一个字符串分割为多个字段,但是分隔符 (还有周围的空格) 并不是固定 的. # str ...

  7. Machine Learning with Python Cookbook 学习笔记 第6章

    Chapter 6. Handling Text 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放在代码压缩 ...

  8. Study_microblog笔记Part 13--日期与时间

    UTC是最常用的统一时区,并且在datetime类中也受到支持,因此在系统会使用UTC时区时间.从服务器的角度来说,将时间戳标准化为UTC,意义重大,但这会为用户带来可用性问题. 对处于不同时区的用户 ...

  9. 《Python Cookbook 3rd》笔记(3.14):计算当前月份的日期范围

    计算当前月份的日期范围 问题 你的代码需要在当前月份中循环每一天,想找到一个计算这个日期范围的高效方法. 解法 在这样的日期上循环并需要事先构造一个包含所有日期的列表.你可以先计算出开始日期和结束日期 ...

最新文章

  1. Java:代码验证 StringBuffer 线程安全,StringBuilder 非线程安全
  2. CSS样式:覆盖规则
  3. TMD 之后,再无 BAT? | 畅言
  4. Beyond Compare 怎么新增与卸载文件格式
  5. 设计模式——命令模式
  6. [spark]Spark2.4.6用put写入写入Hbase1.3.1
  7. 启用Mac系统读写NFTS磁盘
  8. python、MongoDB安装
  9. ai带来的革命_AI革命就在这里。 这与我们预期的不同。
  10. 51单片机倒计时蜂鸣器c语言,基于51单片机的倒计时器设计
  11. 使用Liquid实现简单的数据交换
  12. Cheat Enginee(CE)自带教程使用指南
  13. excel随机数_利用excel快速凭空制造大量随机数据?想要制造什么数据都可以
  14. 【ROS实践入门(九)ROS编译ORB-SLAM2运行】
  15. NAIPC2016 I. Tourists【LCA】
  16. java数组乱码_Java 乱码问题
  17. 计算机英语写一封邮件给汤姆作文,英语作文带翻译写一封电子邮件
  18. 机器视觉(七):图像分割
  19. Jmeter如何进行接口测试-实操
  20. 程序员端午过了回杭州的一点思考

热门文章

  1. ASP+COM技术在嵌入式Webserver中的应用
  2. Linux内核的Softirq机制
  3. wince的调试串口作为普通串口使用
  4. UNICODE十六进制数组转成中英文
  5. 联想一体机电源键不亮_联想电脑一体机B505拆机经验
  6. python打开文件中文名_windows下Python打开包含中文路径名文件
  7. arcgis利用python赋值
  8. 【转】图形流水线中坐标变换详解:模型矩阵、视角矩阵、投影矩阵
  9. 【转】国密加密算法SM系列的C#实现方法
  10. 【转】Dynamics 365 Customer Engagement中插件的调试