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下函数参数的传递(参数带星号的说明)
Sep 19 Python
Python实现Mysql数据库连接池实例详解
Apr 11 Python
浅谈python中的数字类型与处理工具
Aug 02 Python
python数据封装json格式数据
Mar 04 Python
python交换两个变量的值方法
Jan 12 Python
Django实现web端tailf日志文件功能及实例详解
Jul 28 Python
用Python将Excel数据导入到SQL Server的例子
Aug 24 Python
pycharm快捷键汇总
Feb 14 Python
浅谈Python中range与Numpy中arange的比较
Mar 11 Python
在终端启动Python时报错的解决方案
Nov 20 Python
Django+Celery实现定时任务的示例
Jun 23 Python
Selenium浏览器自动化如何上传文件
Apr 06 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写杨辉三角实例代码
2011/07/17 PHP
PHP 自定义错误处理函数的使用详解
2013/05/10 PHP
PH P5.2至5.5、5.6的新增功能详解
2014/07/14 PHP
php提交过来的数据生成为txt文件
2016/04/28 PHP
Laravle eloquent 多对多模型关联实例详解
2017/11/22 PHP
Yii2框架实现登陆添加验证码功能示例
2018/07/12 PHP
可以用来调试JavaScript错误的解决方案
2010/08/07 Javascript
JavaScript高级程序设计(第3版)学习笔记6 初识js对象
2012/10/11 Javascript
html超链接打开窗口大小的方法
2013/03/05 Javascript
js正则表达式中test,exec,match方法的区别说明
2014/01/29 Javascript
jquery的ajax和getJson跨域获取json数据的实现方法
2014/02/04 Javascript
原生JavaScript实现合并多个数组示例
2014/09/21 Javascript
移动Web中图片自适应的两种JavaScript解决方法
2015/06/18 Javascript
javascript跨域方法、原理以及出现问题解决方法(详解)
2015/08/06 Javascript
js仿微博实现统计字符和本地存储功能
2015/12/22 Javascript
微信小程序 css使用技巧总结
2017/01/09 Javascript
JavaScript仿微信打飞机游戏
2020/07/05 Javascript
vue组件实现文字居中对齐的方法
2017/08/23 Javascript
详解VUE中常用的几种import(模块、文件)引入方式
2018/07/03 Javascript
vue中将html字符串转换成html后遇到的问题小结
2018/12/10 Javascript
微信小程序之左右布局的实现代码
2019/12/13 Javascript
js与jquery获取input输入框中的值实例讲解
2020/02/27 jQuery
微信小程序去除左上角返回键的实现方法
2020/03/06 Javascript
vue实现五子棋游戏
2020/05/28 Javascript
VUE中V-IF条件判断改变元素的样式操作
2020/08/09 Javascript
python解析xml文件实例分析
2015/05/27 Python
python 2.6.6升级到python 2.7.x版本的方法
2016/10/09 Python
python实现的二叉树定义与遍历算法实例
2017/06/30 Python
python实现计算器简易版
2020/12/17 Python
canvas绘制表情包的示例代码
2018/07/09 HTML / CSS
澳大利亚领先的时尚内衣零售商:Bras N Things
2020/07/28 全球购物
货代行业个人求职简历的自我评价
2013/10/22 职场文书
家长学校培训材料
2014/08/20 职场文书
龙猫观后感
2015/06/09 职场文书
Axios取消重复请求的方法实例详解
2021/06/15 Javascript
Python-OpenCV教程之图像的位运算详解
2021/06/21 Python