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 28 Python
python基于ID3思想的决策树
Jan 03 Python
Python3多线程爬虫实例讲解代码
Jan 05 Python
详解Tensorflow数据读取有三种方式(next_batch)
Feb 01 Python
python实现m3u8格式转换为mp4视频格式
Feb 28 Python
对numpy中布尔型数组的处理方法详解
Apr 17 Python
python的turtle库使用详解
May 10 Python
python 画函数曲线示例
Dec 04 Python
Django中密码的加密、验密、解密操作
Dec 19 Python
python隐藏类中属性的3种实现方法
Dec 19 Python
Python类如何定义私有变量
Feb 03 Python
Python中的datetime包与time包包和模块详情
Feb 28 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开发入门教程之面向对象
2006/12/05 PHP
用PHP读取超大文件的实例代码
2012/04/01 PHP
php修改NetBeans默认字体的大小
2013/07/02 PHP
PHP4和PHP5版本下解析XML文档的操作方法实例分析
2017/05/20 PHP
PHP排序算法之简单选择排序(Simple Selection Sort)实例分析
2018/04/20 PHP
Ubuntu 11.10 安装Node.js的方法
2011/11/30 Javascript
Javascript的数组与字典用法与遍历对象的属性技巧
2012/11/07 Javascript
javascript 函数声明与函数表达式的区别介绍
2013/10/05 Javascript
详解JavaScript ES6中的Generator
2015/07/28 Javascript
jquery如何获取元素的滚动条高度等实现代码
2015/10/19 Javascript
Bootstrap入门书籍之(三)栅格系统
2016/02/17 Javascript
noty ? jQuery通知插件全面解析
2016/05/18 Javascript
BootStrap Table 设置height表头与内容无法对齐的问题
2016/12/28 Javascript
如何获取元素的最终background-color
2017/02/06 Javascript
js 倒计时(高效率服务器时间同步)
2017/09/12 Javascript
vue-router实现tab标签页(单页面)详解
2017/10/17 Javascript
详解VUE Element-UI多级菜单动态渲染的组件
2019/04/25 Javascript
JavaScript 处理树数据结构的方法示例
2019/06/16 Javascript
微信小程序 textarea 层级过高问题简单解决方案
2019/10/14 Javascript
JSONP解决JS跨域问题的实现
2020/05/25 Javascript
微信小程序实现简单购物车功能
2020/12/30 Javascript
[02:07]2018DOTA2亚洲邀请赛主赛事第三日五佳镜头 fy极限反杀
2018/04/06 DOTA
[01:11:08]Winstrike vs NB 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
Python检测生僻字的实现方法
2016/10/23 Python
解决python中使用plot画图,图不显示的问题
2018/07/04 Python
python字符串的index和find的区别详解
2020/06/20 Python
英国优质鞋类专家:Robinson’s Shoes
2017/12/08 全球购物
介绍一下Linux中的链接
2016/06/05 面试题
军训 自我鉴定
2014/02/03 职场文书
工作鉴定评语
2014/05/04 职场文书
匿名信格式范文
2015/05/27 职场文书
先进基层党组织主要事迹材料
2015/11/03 职场文书
Nginx服务器添加Systemd自定义服务过程解析
2021/03/31 Servers
php 原生分页
2021/04/01 PHP
详解JavaScript中的执行上下文及调用堆栈
2021/04/29 Javascript
java解析XML详解
2021/07/09 Java/Android