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编程实现随机生成多个椭圆实例代码
Jan 03 Python
基于python 二维数组及画图的实例详解
Apr 03 Python
对Python3中dict.keys()转换成list类型的方法详解
Feb 03 Python
Python-接口开发入门解析
Aug 01 Python
django项目中使用手机号登录的实例代码
Aug 15 Python
Python 转换RGB颜色值的示例代码
Oct 13 Python
Python print不能立即打印的解决方式
Feb 19 Python
Pycharm IDE的安装和使用教程详解
Apr 30 Python
Python同时处理多个异常的方法
Jul 28 Python
python 使用csv模块读写csv格式文件的示例
Dec 02 Python
python爬取企查查企业信息之selenium自动模拟登录企查查
Apr 08 Python
详解解Django 多对多表关系的三种创建方式
Aug 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使用DOMDocument类生成HTML实例(包含常见标签元素)
2014/06/25 PHP
phpmailer发送邮件之后,返回收件人是否阅读了邮件的方法
2014/07/19 PHP
PHP获取文件相对路径的方法
2015/02/26 PHP
php实现的数字验证码及数字运算验证码
2015/07/30 PHP
WAF的正确bypass
2017/01/05 PHP
php安装扩展mysqli的实现步骤及报错解决办法
2017/09/23 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
JQuery Dialog(JS 模态窗口,可拖拽的DIV)
2010/02/07 Javascript
js中判断文本框是否为空的两种方法
2011/07/31 Javascript
一行代码实现纯数据json对象的深度克隆实现思路
2013/01/09 Javascript
利用angularjs1.4制作的简易滑动门效果
2017/02/28 Javascript
彻底学会Angular.js中的transclusion
2017/03/12 Javascript
利用Javascript裁剪图片并存储的简单实现
2017/03/13 Javascript
Vue组件内部实现一个双向数据绑定的实例代码
2019/04/04 Javascript
详解Vue、element-ui、axios实现省市区三级联动
2019/05/07 Javascript
JavaScript数组及常见操作方法小结
2019/11/13 Javascript
详解Python当中的字符串和编码
2015/04/25 Python
Python批量转换文件编码格式
2015/05/17 Python
解决uWSGI的编码问题详解
2017/03/24 Python
Python随机数用法实例详解【基于random模块】
2017/04/18 Python
使用Python+Splinter自动刷新抢12306火车票
2018/01/03 Python
python中嵌套函数的实操步骤
2019/02/27 Python
python集合是否可变总结
2019/06/20 Python
Python使用Pandas库实现MySQL数据库的读写
2019/07/06 Python
使用turtle绘制五角星、分形树
2019/10/06 Python
求职自我推荐信
2014/06/25 职场文书
小学数学教研活动总结
2014/07/01 职场文书
植物生产学专业求职信
2014/08/08 职场文书
我的中国梦演讲稿小学篇
2014/08/19 职场文书
说谎欺骗人检讨书300字
2014/11/18 职场文书
学雷锋倡议书
2015/01/19 职场文书
颐和园导游词
2015/01/30 职场文书
Nginx URL重写rewrite机制原理及使用实例
2021/04/01 Servers
JavaScript流程控制(分支)
2021/12/06 Javascript
python的列表生成式,生成器和generator对象你了解吗
2022/03/16 Python
如何通过一篇文章了解Python中的生成器
2022/04/02 Python