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 open()文件处理使用介绍
Nov 30 Python
状态机的概念和在Python下使用状态机的教程
Apr 11 Python
基于Python的XSS测试工具XSStrike使用方法
Jul 29 Python
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
Jan 04 Python
python实现教务管理系统
Mar 12 Python
pandas读取csv文件,分隔符参数sep的实例
Dec 12 Python
详解Python odoo中嵌入html简单的分页功能
May 29 Python
Matplotlib自定义坐标轴刻度的实现示例
Jun 18 Python
python实现将中文日期转换为数字日期
Jul 14 Python
python如何遍历指定路径下所有文件(按按照时间区间检索)
Sep 14 Python
Python模块常用四种安装方式
Oct 20 Python
如何用python写个模板引擎
Jan 14 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 服务器配置(使用Apache及IIS两种方法)
2009/06/01 PHP
PHP 函数语法介绍一
2009/06/14 PHP
yii框架中的Url生产问题小结
2012/01/16 PHP
JavaScript表单常用验证集合
2008/01/16 Javascript
jquery对表单操作2
2011/04/06 Javascript
Notify - 基于jquery的消息通知插件
2011/10/18 Javascript
jQuery-serialize()输出序列化form表单值的方法
2012/12/26 Javascript
理运用命名空间让js不产生冲突避免全局变量的泛滥
2014/06/15 Javascript
Flash图片上传组件 swfupload使用指南
2015/03/14 Javascript
jQuery+PHP实现动态数字展示特效
2015/03/14 Javascript
JavaScript表格常用操作方法汇总
2015/04/15 Javascript
javascript实现table表格隔行变色的方法
2015/05/13 Javascript
JavaScript字符串删除重复字符的方法
2015/12/25 Javascript
JQuery DIV 动态隐藏和显示的方法
2016/06/23 Javascript
JavaScript中数组slice和splice的对比小结
2016/09/22 Javascript
js实现可旋转的立方体模型
2016/10/16 Javascript
多种方式实现js图片预览
2016/12/12 Javascript
微信小程序 图片绝对定位(背景图片)
2017/04/05 Javascript
vue+element实现表单校验功能
2019/05/20 Javascript
Python读写ini文件的方法
2015/05/28 Python
python+pandas生成指定日期和重采样的方法
2018/04/11 Python
深入解析神经网络从原理到实现
2019/07/26 Python
通过celery异步处理一个查询任务的完整代码
2019/11/19 Python
使用python接受tgam的脑波数据实例
2020/04/09 Python
使用css如何制作时间ICON方法实践
2012/11/12 HTML / CSS
使用html2canvas实现将html内容写入到canvas中生成图片
2020/01/03 HTML / CSS
大学校庆策划书
2014/01/31 职场文书
微信营销策划方案
2014/02/24 职场文书
中等生评语大全
2014/05/04 职场文书
大学生工作自荐书
2014/06/16 职场文书
2014年护士工作总结范文
2014/11/11 职场文书
解析Redis Cluster原理
2021/06/21 Redis
PostgreSQL事务回卷实战案例详析
2022/03/25 PostgreSQL
开发微信小程序之WXSS样式教程
2022/04/18 HTML / CSS
Golang 结构体数据集合
2022/04/22 Golang
oracle设置密码复杂度及设置超时退出的功能
2022/06/28 Oracle