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实现用于测试网站访问速率的方法
May 26 Python
一张图带我们入门Python基础教程
Feb 05 Python
Python爬虫通过替换http request header来欺骗浏览器实现登录功能
Jan 07 Python
Python爬虫实现(伪)球迷速成
Jun 10 Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
Jun 14 Python
Python 单元测试(unittest)的使用小结
Nov 14 Python
在PyCharm下打包*.py程序成.exe的方法
Nov 29 Python
深入解析python中的实例方法、类方法和静态方法
Mar 11 Python
pyenv与virtualenv安装实现python多版本多项目管理
Aug 17 Python
对python中UDP,socket的使用详解
Aug 22 Python
Python 数据可视化工具 Pyecharts 安装及应用
Apr 20 Python
Python实现简单得递归下降Parser
May 02 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 session_start()关于Cannot send session cache limiter - headers already sent错误解决方法
2009/11/27 PHP
php ctype函数中文翻译和示例
2014/03/21 PHP
Yii2框架使用计划任务的方法
2016/05/25 PHP
详解php curl带有csrf-token验证模拟提交方法
2018/04/18 PHP
用于table内容排序
2006/07/21 Javascript
用CSS+JS实现的进度条效果效果
2007/06/05 Javascript
关于IE中getElementsByClassName不能用的问题解决方法
2013/08/26 Javascript
让jQuery Mobile不显示讨厌loading界面的方法
2014/02/19 Javascript
JS中三目运算符和if else的区别分析与示例
2014/11/21 Javascript
prototype与__proto__区别详细介绍
2017/01/09 Javascript
jQuery居中元素scrollleft计算方法示例
2017/01/16 Javascript
jQuery模拟窗口抖动效果
2017/03/15 Javascript
vue监听滚动事件实现滚动监听
2017/04/11 Javascript
jQuery 实现双击编辑表格功能
2017/06/19 jQuery
详解react-webpack2-热模块替换[HMR]
2017/08/03 Javascript
浅谈jquery fullpage 插件增加头部和版权的方法
2018/03/20 jQuery
webpack4 SplitChunks实现代码分隔详解
2019/05/23 Javascript
vue项目中运用webpack动态配置打包多种环境域名的方法
2019/06/24 Javascript
Node.js API详解之 console模块用法详解
2020/05/12 Javascript
[01:07:34]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第二场 1月9日
2021/03/11 DOTA
Python脚本简单实现打开默认浏览器登录人人和打开QQ的方法
2016/04/12 Python
Python logging管理不同级别log打印和存储实例
2018/01/19 Python
python3.6的venv模块使用详解
2018/08/01 Python
Python中的random.uniform()函数教程与实例解析
2019/03/02 Python
python tools实现视频的每一帧提取并保存
2020/03/20 Python
python golang中grpc 使用示例代码详解
2020/06/03 Python
python怎么自定义捕获错误
2020/06/29 Python
Python Tkinter实例——模拟掷骰子
2020/10/24 Python
详解CSS3的图层阴影和文字阴影效果使用
2016/06/09 HTML / CSS
CSS实现聊天气泡效果
2020/04/26 HTML / CSS
法国美发器材和产品购物网站:Beauty Coiffure
2016/12/05 全球购物
大学生职业生涯规划范文
2014/01/08 职场文书
西安交大自主招生自荐信
2014/01/27 职场文书
2014年银行员工年终自我评价
2014/09/19 职场文书
2015社区爱国卫生工作总结
2015/04/21 职场文书
党风廉政建设心得体会(2016最新版)
2016/01/22 职场文书