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 相关文章推荐
使用C语言扩展Python程序的简单入门指引
Apr 14 Python
python中numpy基础学习及进行数组和矢量计算
Feb 12 Python
Python利用BeautifulSoup解析Html的方法示例
Jul 30 Python
Django如何实现内容缓存示例详解
Sep 24 Python
Python matplotlib画图实例之绘制拥有彩条的图表
Dec 28 Python
运用TensorFlow进行简单实现线性回归、梯度下降示例
Mar 05 Python
Python结合ImageMagick实现多张图片合并为一个pdf文件的方法
Apr 24 Python
TensorFlow实现卷积神经网络
May 24 Python
Dlib+OpenCV深度学习人脸识别的方法示例
May 14 Python
Python 进程操作之进程间通过队列共享数据,队列Queue简单示例
Oct 11 Python
python实发邮件实例详解
Nov 11 Python
FP-growth算法发现频繁项集——构建FP树
Jun 24 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输出缓冲控制Output Control系列函数详解
2015/07/02 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
2017/12/21 PHP
PHP如何使用cURL实现Get和Post请求
2020/07/11 PHP
JQuery自定义事件的应用 JQuery最佳实践
2010/08/01 Javascript
利用json获取字符出现次数的代码
2012/03/22 Javascript
DWR实现模拟Google搜索效果实现原理及代码
2013/01/30 Javascript
基于javascript实现浏览器滚动条快到底部时自动加载数据
2015/11/30 Javascript
关于JS变量和作用域详解
2016/07/28 Javascript
js判断数组key是否存在(不用循环)的简单实例
2016/08/03 Javascript
深入浅析AngularJS中的一次性数据绑定 (bindonce)
2017/05/11 Javascript
jQuery 点击获取验证码按钮及倒计时功能
2018/09/20 jQuery
vue中的 $slot 获取插槽的节点实例
2019/11/12 Javascript
JavaScript数值类型知识汇总
2019/11/17 Javascript
原理深度解析Vue的响应式更新比React快
2020/04/04 Javascript
使用python删除nginx缓存文件示例(python文件操作)
2014/03/26 Python
初学Python函数的笔记整理
2015/04/07 Python
浅谈numpy生成数组的零值问题
2018/11/12 Python
Python流行ORM框架sqlalchemy安装与使用教程
2019/06/04 Python
python绘制多个子图的实例
2019/07/07 Python
python自动点赞功能的实现思路
2020/02/26 Python
Python把图片转化为pdf代码实例
2020/07/28 Python
利用pipenv和pyenv管理多个相互独立的Python虚拟开发环境
2020/11/01 Python
Space NK美国站:英国高端美妆护肤商城
2017/05/22 全球购物
班班通校本培训方案
2014/03/12 职场文书
质量保证书范本
2014/04/29 职场文书
需求分析说明书
2014/05/09 职场文书
旅游文化节策划方案
2014/06/06 职场文书
中国梦读书活动总结
2014/07/10 职场文书
港澳通行证委托书怎么写
2014/08/02 职场文书
医院领导班子查摆问题对照检查材料思想汇报
2014/10/08 职场文书
工作作风建设心得体会
2014/10/22 职场文书
2015年文明创建工作总结
2015/04/30 职场文书
校长新学期寄语2016
2015/12/04 职场文书
2016三严三实专题教育活动心得体会
2016/01/06 职场文书
CSS3 实现的图片悬停的切换按钮
2021/04/13 HTML / CSS
tensorflow+k-means聚类简单实现猫狗图像分类的方法
2021/04/28 Python