详解Python编程中time模块的使用


Posted in Python onNovember 20, 2015

一、简介

time模块提供各种操作时间的函数
说明:一般有两种表示时间的方式:
第一种是时间戳的方式(相对于1970.1.1 00:00:00以秒计算的偏移量),时间戳是惟一的
第二种以数组的形式表示即(struct_time),共有九个元素,分别表示,同一个时间戳的struct_time会因为时区不同而不同

  • year (four digits, e.g. 1998)
  • month (1-12)
  • day (1-31)
  • hours (0-23)
  • minutes (0-59)
  • seconds (0-59)
  • weekday (0-6, Monday is 0)
  • Julian day (day in the year, 1-366)
  • DST (Daylight Savings Time) flag (-1, 0 or 1) 是否是夏令时
  • If the DST flag is 0, the time is given in the regular time zone;
  • if it is 1, the time is given in the DST time zone;
  • if it is -1, mktime() should guess based on the date and time.

夏令时介绍:http://baike.baidu.com/view/100246.htm

UTC介绍:http://wenda.tianya.cn/wenda/thread?tid=283921a9da7c5aef&clk=wttpcts

二、函数介绍

1.asctime()

asctime([tuple]) -> string

将一个struct_time(默认为当时时间),转换成字符串
Convert a time tuple to a string, e.g. ‘Sat Jun 06 16:26:11 1998'.
When the time tuple is not present, current time as returned by localtime() is used.

2.clock()

clock() -> floating point number
该函数有两个功能,
在第一次调用的时候,返回的是程序运行的实际时间;
以第二次之后的调用,返回的是自第一次调用后,到这次调用的时间间隔

注:
在Xinux上使用 time.time() 而在windows中使用time.clock()可以得到更高的精度.
Xinux和Win在实现系统时钟的不同。time.clock()是调用的系统时钟实现,而两个平台又有所不同。
主要问题在于Xinux时钟切换策略:jiffy的实现,因为内核时钟的切换不是连续的而是间隔一段时间(一般而言在1ms~10ms之间)之后才变化, 所以如果是在Xinux中的两次耗时较短的调用,通过time.clock()得到的结果是一样的。

3.sleep(…)

sleep(seconds)
线程推迟指定的时间运行,经过测试,单位为秒
示例:

import time
 if __name__ == '__main__':
   time.sleep(3)
   print "clock1: %s" % time.clock()
   # print "local time: %s" % time.localtime()
   print str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
   time.sleep(3)
   print "clock2: %s" % time.clock()
   # print "local time: %s" % time.localtime()
   print str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
   time.sleep(3)
   print "clock3: %s" % time.clock()
   # print "local time: %s" % time.localtime()
   print str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))

结果

clock1: 0.020678
2015-08-09 00:18:31
clock2: 0.020891
2015-08-09 00:18:34
clock3: 0.021068
2015-08-09 00:18:37

4.ctime(…)

ctime(seconds) -> string
将一个时间戳(默认为当前时间)转换成一个时间字符串
例如:

time.ctime()

输出为:

'Sat Mar 28 22:24:24 2009′

5.gmtime(…)

gmtime([seconds]) -> (tm_year, tm_mon, tm_day, tm_hour, tm_min,tm_sec, tm_wday, tm_yday, tm_isdst)
将一个时间戳转换成一个UTC时区(0时区)的struct_time,如果seconds参数未输入,则以当前时间为转换标准

6.localtime(…)

localtime([seconds]) -> (tm_year,tm_mon,tm_day,tm_hour,tm_min,tm_sec,tm_wday,tm_yday,tm_isdst)
将一个时间戳转换成一个当前时区的struct_time,如果seconds参数未输入,则以当前时间为转换标准

7.mktime(…)

mktime(tuple) -> floating point number
将一个以struct_time转换为时间戳

8.strftime(…)

strftime(format[, tuple]) -> string
将指定的struct_time(默认为当前时间),根据指定的格式化字符串输出
python中时间日期格式化符号:

  • %y 两位数的年份表示(00-99)
  • %Y 四位数的年份表示(000-9999)
  • %m 月份(01-12)
  • %d 月内中的一天(0-31)
  • %H 24小时制小时数(0-23)
  • %I 12小时制小时数(01-12)
  • %M 分钟数(00=59)
  • %S 秒(00-59)
  • %a 本地简化星期名称
  • %A 本地完整星期名称
  • %b 本地简化的月份名称
  • %B 本地完整的月份名称
  • %c 本地相应的日期表示和时间表示
  • %j 年内的一天(001-366)
  • %p 本地A.M.或P.M.的等价符
  • %U 一年中的星期数(00-53)星期天为星期的开始
  • %w 星期(0-6),星期天为星期的开始
  • %W 一年中的星期数(00-53)星期一为星期的开始
  • %x 本地相应的日期表示
  • %X 本地相应的时间表示
  • %Z 当前时区的名称
  • %% %号本身
print str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
2015-08-09 00:18:37

9.strptime(…)

strptime(string, format) -> struct_time
将时间字符串根据指定的格式化符转换成数组形式的时间
例如:
2009-03-20 11:45:39 对应的格式化字符串为:%Y-%m-%d %H:%M:%S
Sat Mar 28 22:24:24 2009 对应的格式化字符串为:%a %b %d %H:%M:%S %Y

10.time(…)

time() -> floating point number
返回当前时间的时间戳(1970纪元后经过的浮点秒数)

三、常用命令

1.python获取当前时间

time.time() 获取当前时间戳
time.localtime() 当前时间的struct_time形式
time.ctime() 当前时间的字符串形式

print time.time()
 print time.localtime()
 print time.ctime()

结果为:

1439051479.08
time.struct_time(tm_year=2015, tm_mon=8, tm_mday=9, tm_hour=0, tm_min=31, tm_sec=19, tm_wday=6, tm_yday=221, tm_isdst=0)
 Sun Aug 9 00:31:19 2015

2.python格式化字符串

格式化成2009-03-20 11:45:39形式

time.strftime(“%Y-%m-%d %H:%M:%S”, time.localtime())

格式化成Sat Mar 28 22:24:24 2009形式

time.strftime(“%a %b %d %H:%M:%S %Y”, time.localtime())

3.将格式字符串转换为时间戳

a = “Sat Mar 28 22:24:24 2009″

b = time.mktime(time.strptime(a,”%a %b %d %H:%M:%S %Y”))

ps:
了解这一块主要是想用time来计算我程序中关键既不的运行时间,所以更多整理这部分内容。至于时间的转化等,后续用得着的时候再来整理。

四、使用time模块计算代码执行效率的精度测试

#python中使用time模块计算代码执行效率 
#测试用time.time()和time.clock()使用精度 
 
import sys 
import time 
import timeit 
default_timer = None 
 
if sys.platform == "win32": 
# On Windows, the best timer is time.clock() 
  default_timer = time.clock 
else: 
# On most other platforms the best timer is time.time() 
  default_timer = time.time 
print default_timer 
timeIn= time.clock() 
for i in range(100): 
  n=i 
timeUse = time.clock()-timeIn 
print timeUse 
 
timeIn = time.time() 
for i in range(100): 
  n=i 
timeUse = time.time()-timeIn 
print timeUse 
 
timeIn = timeit.default_timer() 
for i in range(100): 
  n=i 
timeUse = timeit.default_timer()-timeIn 
print timeUse 
 
  
 
#该段代码在windows下结果如下 
>>>  
4.07873067161e-005 
0.0 
3.5758734839e-005 
 
#因为time.clock() 返回的是处理器时间,而因为 Unix 中 jiffy 的缘故,所以精度不会太高。 
#因此,在Windows 系统中,建议使用 time.clock(),在Unix 系统中,建议使用 time.time(), 
#而使用timeit代替 time,就可以实现跨平台的精度性,使用timeit.default_timer()函数来获取时间
Python 相关文章推荐
在GitHub Pages上使用Pelican搭建博客的教程
Apr 25 Python
Python实现高效求解素数代码实例
Jun 30 Python
Python3网络爬虫之使用User Agent和代理IP隐藏身份
Nov 23 Python
python实现闹钟定时播放音乐功能
Jan 25 Python
Python获取CPU、内存使用率以及网络使用状态代码
Feb 08 Python
tensorflow 1.0用CNN进行图像分类
Apr 15 Python
Python 取numpy数组的某几行某几列方法
Oct 24 Python
tensorflow ckpt模型和pb模型获取节点名称,及ckpt转pb模型实例
Jan 21 Python
浅谈python print(xx, flush = True) 全网最清晰的解释
Feb 21 Python
Python使用Pyqt5实现简易浏览器(最新版本测试过)
Apr 27 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
May 03 Python
python3读取文件指定行的三种方法
May 24 Python
Windows上配置Emacs来开发Python及用Python扩展Emacs
Nov 20 #Python
将Emacs打造成强大的Python代码编辑工具
Nov 20 #Python
Python聚类算法之DBSACN实例分析
Nov 20 #Python
Python聚类算法之凝聚层次聚类实例分析
Nov 20 #Python
Python聚类算法之基本K均值实例详解
Nov 20 #Python
Python实现将xml导入至excel
Nov 20 #Python
使用PyCharm配合部署Python的Django框架的配置纪实
Nov 19 #Python
You might like
关于时间计算的结总
2006/12/06 PHP
PHP简单读取xml文件的方法示例
2017/04/20 PHP
php readfile下载大文件失败的解决方法
2017/05/22 PHP
有趣的javascript数组定义方法
2010/09/10 Javascript
Ext.get() 和 Ext.query()组合使用实现最灵活的取元素方式
2011/09/26 Javascript
用js实现控件的隐藏及style.visibility的使用
2013/06/14 Javascript
基于JQuery的列表拖动排序实现代码
2013/10/01 Javascript
JS禁用浏览器退格键实现思路及代码
2013/10/29 Javascript
jQuery中事件对象e的事件冒泡用法示例介绍
2014/04/25 Javascript
Javascript中数组sort和reverse用法分析
2014/12/30 Javascript
JavaScript电子时钟倒计时第二款
2016/01/10 Javascript
Angular4 ElementRef的应用
2018/02/26 Javascript
vue2.0模拟锚点的实例
2018/03/14 Javascript
vue自定义js图片碎片轮播图切换效果的实现代码
2019/04/28 Javascript
vue实现带复选框的树形菜单
2019/05/27 Javascript
Vue实现日历小插件
2019/06/26 Javascript
Vue.js递归组件实现组织架构树和选人功能案例分析
2019/07/03 Javascript
D3.js 实现带伸缩时间轴拓扑图的示例代码
2020/01/20 Javascript
package.json各个属性说明详解
2020/03/11 Javascript
vue 监听 Treeselect 选择项的改变操作
2020/08/31 Javascript
[01:09]模型精美,特效酷炫!TI9不朽宝藏Ⅰ鉴赏
2019/05/10 DOTA
使用Python进行稳定可靠的文件操作详解
2013/12/31 Python
Windows下用py2exe将Python程序打包成exe程序的教程
2015/04/08 Python
深入解析Python中的lambda表达式的用法
2015/08/28 Python
python将ansible配置转为json格式实例代码
2017/05/15 Python
浅谈Python中的全局锁(GIL)问题
2019/01/11 Python
python 安装教程之Pycharm安装及配置字体主题,换行,自动更新
2020/03/13 Python
html5记忆翻牌游戏实现思路及代码
2013/07/25 HTML / CSS
全球独特生活方式产品和礼品购物网站:AHAlife
2018/09/18 全球购物
Ticketmaster意大利:音乐会、节日、艺术和剧院的官方门票
2019/12/23 全球购物
什么是servlet
2012/05/08 面试题
招聘单位介绍信
2014/01/14 职场文书
社区公民道德宣传日活动总结
2015/03/23 职场文书
2016寒假假期总结
2015/10/10 职场文书
通过feDisplacementMap和feImage实现水波特效
2022/04/24 HTML / CSS
Android开发EditText禁止输入监听及InputFilter字符过滤
2022/06/10 Java/Android