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实现线程池代码分享
Jun 21 Python
Python实现HTTP协议下的文件下载方法总结
Apr 20 Python
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
Nov 16 Python
用pandas按列合并两个文件的实例
Apr 12 Python
python 将大文件切分为多个小文件的实例
Jan 14 Python
django rest framework 实现用户登录认证详解
Jul 29 Python
python批量图片处理简单示例
Aug 06 Python
用Python做一个久坐提醒小助手的示例代码
Feb 10 Python
python自定义函数def的应用详解
Jun 03 Python
Python爬虫Scrapy框架CrawlSpider原理及使用案例
Nov 20 Python
python实现简单的井字棋游戏(gui界面)
Jan 22 Python
python opencv通过按键采集图片源码
May 20 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
IE 当eval遇上function的处理
2011/08/09 Javascript
JS正则中的RegExp对象对象
2012/11/07 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器
2013/06/21 Javascript
select多选 multiple的使用示例
2014/06/16 Javascript
JS简单操作select和dropdownlist实例
2014/11/26 Javascript
jQuery实现带有洗牌效果的动画分页实例
2015/08/31 Javascript
js中利用tagname和id获取元素的方法
2016/01/03 Javascript
Bootstrap零基础入门教程(三)
2016/07/18 Javascript
原生js实现tab选项卡切换
2020/03/23 Javascript
getElementById().innerHTML与getElementById().value的区别
2016/10/27 Javascript
详解微信小程序 页面跳转 传递参数
2016/12/08 Javascript
详解如何较好的使用js
2016/12/16 Javascript
jQuery实现的淡入淡出与滑入滑出效果示例
2018/04/18 jQuery
微信小程序中this.data与this.setData的区别详解
2018/09/17 Javascript
12 种使用Vue 的最佳做法
2020/03/30 Javascript
vue 实现在同一界面实现组件的动态添加和删除功能
2020/06/16 Javascript
vue实践---vue不依赖外部资源实现简单多语操作
2020/09/21 Javascript
Python多线程实现同步的四种方式
2017/05/02 Python
老生常谈python函数参数的区别(必看篇)
2017/05/29 Python
Python3实现的Mysql数据库操作封装类
2018/06/06 Python
Python3 读、写Excel文件的操作方法
2018/10/20 Python
Python Flask框架扩展操作示例
2019/05/03 Python
Python 仅获取响应头, 不获取实体的实例
2019/08/21 Python
浅谈python 类方法/静态方法
2020/09/18 Python
CSS3实现头像旋转效果
2017/03/13 HTML / CSS
茵宝(Umbro)英国官方商店:英国足球服装生产商
2016/12/29 全球购物
美国顶级水上运动专业店:Marine Products
2018/04/15 全球购物
亚马逊加拿大网站:Amazon.ca
2020/01/06 全球购物
入党自我鉴定
2014/03/25 职场文书
马丁路德金演讲稿
2014/05/19 职场文书
业绩倒数第一的检讨书
2014/09/24 职场文书
发展党员工作情况汇报
2014/10/28 职场文书
入股协议书范本
2014/11/01 职场文书
小班下学期幼儿评语
2014/12/30 职场文书
离职感谢信怎么写
2015/01/22 职场文书
可怜妈妈观后感
2015/06/09 职场文书