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 相关文章推荐
kNN算法python实现和简单数字识别的方法
Nov 18 Python
python3实现短网址和数字相互转换的方法
Apr 28 Python
Python利用Beautiful Soup模块搜索内容详解
Mar 29 Python
python实现归并排序算法
Nov 22 Python
python中ImageTk.PhotoImage()不显示图片却不报错问题解决
Dec 06 Python
python之拟合的实现
Jul 19 Python
Django打印出在数据库中执行的语句问题
Jul 25 Python
Python3 Tensorlfow:增加或者减小矩阵维度的实现
May 22 Python
使用matplotlib的pyplot模块绘图的实现示例
Jul 12 Python
详解Python 最短匹配模式
Jul 29 Python
python利用pytesseract 实现本地识别图片文字
Dec 14 Python
Python采集爬取京东商品信息和评论并存入MySQL
Apr 12 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返回当前日期或者指定日期是周几
2015/05/21 PHP
javascript一点特殊用法
2008/05/28 Javascript
Extjs Ajax 乱码问题解决方案
2009/04/15 Javascript
JS.elementGetStyle(element, style)应用示例
2013/09/24 Javascript
带左右箭头图片轮播的JS代码
2013/12/18 Javascript
用js的document.write输出的广告无阻塞加载的方法
2014/06/05 Javascript
JS实现控制表格内指定单元格内容对齐的方法
2015/03/30 Javascript
jquery滚动到顶部底部代码
2015/04/20 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件体系结构
2015/11/19 Javascript
Angularjs中$http以post请求通过消息体传递参数的实现方法
2016/08/05 Javascript
AngularJS HTML DOM详解及示例代码
2016/08/17 Javascript
jQuery插件easyUI实现通过JS显示Dialog的方法
2016/09/16 Javascript
使用nodejs下载风景壁纸
2017/02/05 NodeJs
原生JavaScript实现AJAX、JSONP
2017/02/07 Javascript
DOM事件探秘篇
2017/02/15 Javascript
vue中实现滚动加载更多的示例
2017/11/08 Javascript
微信小程序模板(template)使用详解
2018/01/31 Javascript
关于Python数据结构中字典的心得
2017/12/04 Python
python爬虫之模拟登陆csdn的实例代码
2018/05/18 Python
树莓派使用USB摄像头和motion实现监控
2019/06/22 Python
使用OpenCV实现道路车辆计数的使用方法
2020/07/15 Python
利用html5 file api读取本地文件示例(如图片、PDF等)
2018/03/07 HTML / CSS
Blue Nile蓝色尼罗河香港官网:世界最大在线钻石珠宝销售商
2020/05/07 全球购物
当我正在为表建立索引的时候,SQL Server 会禁止对表的访问吗
2014/04/28 面试题
大学本科毕业生求职信范文
2013/12/18 职场文书
信息技术专业大学生职业生涯规划书
2014/01/24 职场文书
社区食品安全实施方案
2014/03/28 职场文书
小学生优秀评语大全
2014/04/22 职场文书
促销活动总结报告
2014/04/26 职场文书
2014年党支部书记工作总结
2014/12/04 职场文书
2015年艾滋病宣传活动总结
2015/03/27 职场文书
一个都不能少观后感
2015/06/04 职场文书
排球赛新闻稿
2015/07/17 职场文书
创业计划书之甜品店
2019/09/18 职场文书
豆瓣2021评分最高动画剧集-豆瓣评分最高的动画剧集2021
2022/03/18 日漫
Centos系统通过Docker安装并搭建MongoDB数据库
2022/04/12 MongoDB