Python中time模块与datetime模块在使用中的不同之处


Posted in Python onNovember 24, 2015

Python 中提供了对时间日期的多种多样的处理方式,主要是在 time 和 datetime 这两个模块里。今天稍微梳理一下这两个模块在使用上的一些区别和联系。

time
在 Python 文档里,time是归类在Generic Operating System Services中,换句话说, 它提供的功能是更加接近于操作系统层面的。通读文档可知,time 模块是围绕着 Unix Timestamp 进行的。

该模块主要包括一个类 struct_time,另外其他几个函数及相关常量。 需要注意的是在该模块中的大多数函数是调用了所在平台C library的同名函数, 所以要特别注意有些函数是平台相关的,可能会在不同的平台有不同的效果。另外一点是,由于是基于Unix Timestamp,所以其所能表述的日期范围被限定在 1970 - 2038 之间,如果你写的代码需要处理在前面所述范围之外的日期,那可能需要考虑使用datetime模块更好。文档解释比较费劲,具体看看怎么用:

In [1]: import time

In [2]: time.time()
Out[2]: 1414332433.345712
In [3]: timestamp = time.time()

In [4]: time.gmtime(timestamp)
Out[4]: time.struct_time(tm_year=2014, tm_mon=10, tm_mday=26, tm_hour=14, tm_min=7, tm_sec=13, tm_wday=6, tm_yday=299, tm_isdst=0)

In [5]: time.localtime(timestamp)
Out[5]: time.struct_time(tm_year=2014, tm_mon=10, tm_mday=26, tm_hour=22, tm_min=7, tm_sec=13, tm_wday=6, tm_yday=299, tm_isdst=0)
In [6]: struct_time = time.localtime(timestamp)

In [7]: time.ctime(timestamp)
Out[7]: 'Sun Oct 26 22:07:13 2014'

In [8]: time.asctime(struct_time)
Out[8]: 'Sun Oct 26 22:07:13 2014'

In [9]: time.mktime(struct_time)
Out[9]: 1414332433.0

In [10]: time.strftime("%a, %d %b %Y %H:%M:%S +0000", struct_time)
Out[10]: 'Sun, 26 Oct 2014 22:07:13 +0000'

In [11]: time.strptime("30 Nov 00", "%d %b %y")
Out[11]: time.struct_time(tm_year=2000, tm_mon=11, tm_mday=30, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=335, tm_isdst=-1)

问题不大,可能有时候需要注意一下使用的时区。

datetime
datetime 比 time 高级了不少,可以理解为 datetime 基于 time 进行了封装,提供了更多实用的函数。在datetime 模块中包含了几个类,具体关系如下:

object

  • timedelta  # 主要用于计算时间跨度
  • tzinfo         # 时区相关
  • time          # 只关注时间
  • date          # 只关注日期
  • datetime  # 同时有时间和日期

名称比较绕口,在实际实用中,用得比较多的是 datetime.datetime 和 datetime.timedelta ,另外两个 datetime.date 和 datetime.time 实际使用和 datetime.datetime 并无太大差别。 下面主要讲讲 datetime.datetime 的使用。使用datetime.datetime.now()可以获得当前时刻的datetime.datetime 实例。 对于一个 datetime.datetime 实例,主要会有以下属性及常用方法,看名称就能理解,应该没有太大问题:

  • datetime.year
  • datetime.month
  • datetime.day
  • datetime.hour
  • datetime.minute
  • datetime.second
  • datetime.microsecond
  • datetime.tzinfo
datetime.date() # 返回 date 对象
datetime.time() # 返回 time 对象
datetime.replace(name=value) # 前面所述各项属性是 read-only 的,需要此方法才可更改
datetime.timetuple() # 返回time.struct_time 对象
dattime.strftime(format) # 按照 format 进行格式化输出

...
除了实例本身具有的方法,类本身也提供了很多好用的方法:

  • datetime.today()a  # 当前时间,localtime
  • datetime.now([tz]) # 当前时间默认 localtime
  • datetime.utcnow()  # UTC 时间
  • datetime.fromtimestamp(timestamp[, tz]) # 由 Unix Timestamp 构建对象
  • datetime.strptime(date_string, format)  # 给定时间格式解析字符串

...

请注意,上面省略了很多和时区相关的函数,如需使用请查文档。对于日期的计算,使用timedelta也算是比较简单的:

In [1]: import datetime
In [2]: time_now = datetime.datetime.now()
In [3]: time_now
Out[3]: datetime.datetime(2014, 10, 27, 21, 46, 16, 657523)

In [4]: delta1 = datetime.timedelta(hours=25)
In [5]: print(time_now + delta1)
2014-10-28 22:46:16.657523

In [6]: print(time_now - delta1)
2014-10-26 20:46:16.657523

甚至两个 datetime 对象直接相减就能获得一个 timedelta 对象。如果有需要计算工作日的需求,可以使用 business_calendar这个库,不需要装其他依赖就可使用。

Python 相关文章推荐
Python安装使用命令行交互模块pexpect的基础教程
May 12 Python
Python设置默认编码为utf8的方法
Jul 01 Python
详解使用pymysql在python中对mysql的增删改查操作(综合)
Jan 18 Python
Python实现基于多线程、多用户的FTP服务器与客户端功能完整实例
Aug 18 Python
python pandas 如何替换某列的一个值
Jun 09 Python
python文件操作的简单方法总结
Nov 07 Python
Java文件与类动手动脑实例详解
Nov 10 Python
在Python中使用turtle绘制多个同心圆示例
Nov 23 Python
Python爬虫与反爬虫大战
Jul 30 Python
5款实用的python 工具推荐
Oct 13 Python
Pytorch1.5.1版本安装的方法步骤
Dec 31 Python
python 镜像环境搭建总结
Sep 23 Python
简单解决Python文件中文编码问题
Nov 22 #Python
Python制作简单的网页爬虫
Nov 22 #Python
Python编程中使用Pillow来处理图像的基础教程
Nov 20 #Python
在Mac OS系统上安装Python的Pillow库的教程
Nov 20 #Python
详解Python编程中time模块的使用
Nov 20 #Python
Windows上配置Emacs来开发Python及用Python扩展Emacs
Nov 20 #Python
将Emacs打造成强大的Python代码编辑工具
Nov 20 #Python
You might like
PHP 分页原理分析,大家可以看看
2009/12/21 PHP
php生成静态文件的多种方法分享
2012/07/17 PHP
phpmyadmin打开很慢的解决方法
2014/04/21 PHP
PHP守护进程化在C和PHP环境下的实现
2017/11/21 PHP
Javascript 自适应高度的Tab选项卡
2011/04/05 Javascript
JS实现可改变列宽的table实例
2013/07/02 Javascript
Jquery 例外被抛出且未被接住原因介绍
2013/09/04 Javascript
javascript仿php的print_r函数输出json数据
2013/09/13 Javascript
手机端网页点击链接触发自动拨打或保存电话的示例代码
2014/08/15 Javascript
Javascript模块化编程详解
2014/12/01 Javascript
Vue中如何实现轮播图的示例代码
2017/07/27 Javascript
js实现网页的两个input标签内的数值加减(示例代码)
2017/08/15 Javascript
vue+iview+less+echarts实战项目总结
2018/02/22 Javascript
[01:48]2018DOTA2亚洲邀请赛主赛事第二日五佳镜头 VG完美团战逆转TNC
2018/04/05 DOTA
用python实现批量重命名文件的代码
2012/05/25 Python
python中私有函数调用方法解密
2016/04/29 Python
python中Switch/Case实现的示例代码
2017/11/09 Python
Python针对给定列表中元素进行翻转操作的方法分析
2018/04/27 Python
python计算列表内各元素的个数实例
2018/06/29 Python
详解Django的CSRF认证实现
2018/10/09 Python
PyCharm设置护眼背景色的方法
2018/10/29 Python
Python语言进阶知识点总结
2019/05/28 Python
Pyorch之numpy与torch之间相互转换方式
2019/12/31 Python
python通过matplotlib生成复合饼图
2020/02/06 Python
Django 允许局域网中的机器访问你的主机操作
2020/05/13 Python
Keras自动下载的数据集/模型存放位置介绍
2020/06/19 Python
Feelunique美国:欧洲大型的在线美妆零售电商
2018/11/04 全球购物
Ibatis的核心配置文件都有什么
2014/09/08 面试题
Python如何定义一个函数
2015/09/01 面试题
读书活动实施方案
2014/03/10 职场文书
村党支部群众路线教育实践活动对照检查材料
2014/09/26 职场文书
给老师的感谢信
2015/01/20 职场文书
2015年建党94周年演讲稿
2015/03/19 职场文书
个人借条范本
2015/05/25 职场文书
vue前端工程的搭建
2021/03/31 Vue.js
httpclient调用远程接口的方法
2022/08/14 Java/Android