首页 > 代码库 > python基础教程_学习笔记17:标准库:一些最爱——time

python基础教程_学习笔记17:标准库:一些最爱——time

标准库:一些最爱

time

time模块所包含的函数能够实现以下功能:

获取当前时间、操作系统时间和日期、从字符串读取时间以及格式化时间为字符串。

日期可以用实数(从“新纪元”的110点开始计算到现在的秒数,新纪元是一个与平台相关的年份,对unix来说是1970年),或者是包含有9个整数的元组。

日期元组的字段含义

如元组:

(2008,1,21,12,2,56,0,21,0)

表示200812112256秒,星期一,且是当年的第21天(无夏令时)。

索引

字段

0

比如20002001,等等

1

112

2

131

3

023

4

059

5

061

6

当周一为0时,范围06

7

儒历日

范围1366

8

夏令时

01-1

秒的范围是061是为了应付闰秒和双闰秒。夏令时的数字是布尔值(真或假),但如果使用了-1mktime就会工作正常。

重要的函数

函数

描述

asctime([tuple])

将时间元组转换为字符串

localtime([secs])

将秒数转换为日期元组,以本地时间为准

mktime(tuple)

将时间元组转换为本地时间

sleep(secs)

休眠(不做任何事情)secs

strptime(string[,format])

将字符串解析为时间元组

time()

当前时间(新纪元开始后的秒数,以UTC为准)

 

>>> import time

>>> time.asctime()

‘Thu Jun 26 14:34:03 2014‘

 

获得全球统一时间:

>>> time.gmtime()

time.struct_time(tm_year=2014, tm_mon=6, tm_mday=26, tm_hour=6, tm_min=38, tm_sec=42, tm_wday=3, tm_yday=177, tm_isdst=0)

time.mktime函数与time.localtime功能相反;

time.time使用自新纪元开始计算的秒数返回当前(全球统一)时间,尽管每个平台的新纪元可能不同,但可以通过记录某事件(如函数调用)发生前后time的结果来对该事件计时,然后计算差值。

练习 获取当前时间

脚本内容

$ cat time-example-1.py

#File : time-example-1.py

 

import time

now=time.time()

 

print now,"seconds since",time.gmtime(0)[:6]

print

print "or in other words:"

print "- local time:",time.localtime(now)

print "- utc:",time.gmtime(now)

 

执行结果

$ python time-example-1.py

1403765543.77 seconds since (1970, 1, 1, 0, 0, 0)

 

or in other words:

- local time: (2014, 6, 26, 14, 52, 23, 3, 177, 0)

- utc: (2014, 6, 26, 6, 52, 23, 3, 177, 0)

 

练习 格式化日期和时间

脚本内容

$ cat  time-example-2.py

#File : time-example-2.py

 

import time

 

now=time.localtime(time.time())

 

print time.asctime(now)

print time.strftime("%y%m%d %H:%M",now)

print time.strftime("%a %b %d",now)

print time.strftime("%c",now)

print time.strftime("%I %p",now)

print time.strftime("%Y-%m-%d %H:%M:%S %Z",now)

 

# do it by hand ...

year,month,day,hour,minute,second,weekday,yearday,daylight=now

print "%04d-%02d-%02d" %(year,month,day)

print "%02d:%02d:%02d" %(hour,minute,second)

print ("MON","TUE","WED","THU","FRI","SAT","SUN")[weekday],yearday

 

执行结果

$ python time-example-2.py

Thu Jun 26 15:01:47 2014

140626 15:01

Thu Jun 26

Thu Jun 26 15:01:47 2014

03 PM

2014-06-26 15:01:47 CST

2014-06-26

15:01:47

THU 177

 

 

练习 使用time.strptime解析日期和时间

脚本内容

$ cat time-example-6.py

#File : time-example-6.py

 

import time

try:

        strptime=time.strptime

except AttributeError:

        from strptime import strptime

 

print strptime("30 Nov 00","%d %b %y")

print strptime("1 Jan 70 1:30pm","%d %b %y %I:%M%p")

 

执行结果

$ python time-example-6.py

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)

time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=13, tm_min=30, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=-1)

 

 

练习 把本地时间对转换为时间整型

脚本内容

$ cat time-example-3.py

#File : time-example-3.py

 

import time

 

to=time.time()

tm=time.localtime(to)

 

print tm

 

print to

print time.mktime(tm)

 

执行结果

time.struct_time(tm_year=2014, tm_mon=6, tm_mday=26, tm_hour=15, tm_min=11, tm_sec=9, tm_wday=3, tm_yday=177, tm_isdst=0)

1403766669.32

1403766669.0

练习 把UTC时间转换为世界整型

脚本内容

$ cat time-example-4.py

#File : time-example-4.py

 

import time

 

def _d(y,m,d,days=(0,31,59,90,120,151,181,212,243,273,304,334,365)):

        return (((y-1901)*1461)/4 + days[m-1] + d +

                (( m>2 and not y % 4 and (y % 100 or not y % 400)) and 1))

 

def timegm(tm,epoch=_d(1070,1,1)):

        year,month,day,h,m,s=tm[:6]

        assert year>=1970

        assert 1 <= month <= 12

        return (_d(year,month,day) -epoch) * 86400 + h*3600 + m*60 + s

 

t0=time.time()

tm=time.gmtime(t0)

 

print tm

 

print t0

print timegm(tm)

 

执行结果

$ python time-example-4.py

time.struct_time(tm_year=2014, tm_mon=6, tm_mday=26, tm_hour=7, tm_min=23, tm_sec=22, tm_wday=3, tm_yday=177, tm_isdst=0)

1403767402.91

29805607402

练习 校准算法

脚本内容

$ cat time-example-5.py

#File : time-example-5.py

 

import time

 

def procedure():

        time.sleep(2.5)

 

t0=time.clock()

procedure()

print time.clock()-t0,"Seconds process time"

 

t0=time.time()

procedure()

print time.time()-t0,"seconds wall time"

 

执行结果

$ python time-example-5.py

0.0 Seconds process time

2.50005602837 seconds wall time