python系统日期_python之日期和时间

1、时钟时间--time

time提供了很多管理时钟时间的函数,如

1)获取以秒为单位的浮点时间time():

>>> importtime>>> print time.time()#获取当前时间的浮点值,单位为秒

1369031293.33

>>>

2)获取人可以直观理解的时间ctime():

>>> printtime.ctime()

Mon May20 14:29:30 2013#获取人能理解的直观时间

3)浮点时间转化为直观时间:

>>> t = time.time()#浮点时间

>>> printt1369034676.69

>>> print time.ctime(t)#浮点时间转化为直观时间

Mon May 20 15:24:36 2013

4)ctime()到time(),直观时间到浮点时间的直接转化,我在python的标准库中没有找到。但经过一步中间转化strptime()为UTC时间后,可以转化为浮点时间,建议先看到9)再回来看,这样会比较容易理解。

>>> t = time.time()#浮点时间

>>> ct = time.ctime(t)#浮点转化为直观时间

>>> gmt = time.strptime(ct)#直观时间转化为UTC时间

>>> tt = time.mktime(gmt)#UTC时间转化为浮点值时间

>>> printt,tt1369035200.01 1369035200.0

注意:浮点时间t先转化为直观时间ct,再转化为浮点时间tt,发现tt的精度降低了。因为直观时间只能精确到秒,所以从浮点时间t先转化为直观时间ct,小数点后面的毫秒就已经丢失了。

5)获取格林尼治时间UTC(Coordinated Universal Time,协调时间)格式:

>>> print time.gmtime()#获取UTC格式的当前时间

time.struct_time(tm_year=2013, tm_mon=5, tm_mday=20, tm_hour=6, tm_min=37, tm_sec=45, tm_wday=0, tm_yday=140, tm_isdst=0)

一个UTC格式的时间有9项目,最后一个tm_isdst表示是否是夏时令时间

6)获取当前时区的当前时间localtime()

>>> print time.localtime()#获取当前时区的当前时间time.struct_time(tm_year=2013, tm_mon=5, tm_mday=20, tm_hour=14, tm_min=45, tm_sec=24, tm_wday=0, tm_yday=140, tm_isdst=0)

7)解析UTC格式时间:

importtimedefshow_timestruct(t):print '年:',t.tm_yearprint '月:',t.tm_monprint '日:',t.tm_mdayprint '小时:',t.tm_hourprint '分钟',t.tm_minprint '秒',t.tm_secprint '星期:',t.tm_wdayprint '一年的第 %s 天' %t.tm_ydayprint '是否夏时令:',t.tm_isdstif __name__ == "__main__":

t=time.gmtime()

show_timestruct(t)>>>年:2013月:5日:20小时:7分钟9秒50星期: 0

一年的第140天

是否夏时令: 0

8)将UTC格式的时间转化为浮点值的时间:

>>> gmt = time.gmtime()#UTC格式的时间

>>> printgmt

time.struct_time(tm_year=2013, tm_mon=5, tm_mday=20, tm_hour=6, tm_min=48, tm_sec=13, tm_wday=0, tm_yday=140, tm_isdst=0)>>> print time.mktime(gmt)#将UTC格式的时间转化为浮点值的时间

1369003693.0

>>> lt = time.localtime()#将UTC格式当前时区当前时间

>>> printlt

time.struct_time(tm_year=2013, tm_mon=5, tm_mday=20, tm_hour=14, tm_min=49, tm_sec=25, tm_wday=0, tm_yday=140, tm_isdst=0)>>> print time.mktime(lt)##将UTC格式的时间转化为浮点值的时间

1369032565.0

9)将浮点值的时间转化为UTC格式的时间:

>>> t = time.time()#浮点时间

>>> print time.gmtime(t)#将浮点值的时间转化为UTC格式的时间:

time.struct_time(tm_year=2013, tm_mon=5, tm_mday=20, tm_hour=6, tm_min=57, tm_sec=58, tm_wday=0, tm_yday=140, tm_isdst=0)>>> print time.localtime(t)#将浮点值的时间转化为UTC格式当前时区时间:

time.struct_time(tm_year=2013, tm_mon=5, tm_mday=20, tm_hour=14, tm_min=57, tm_sec=58, tm_wday=0, tm_yday=140, tm_isdst=0)>>>

三类时间格式之间的转换如下:

10)格式化日期:

>>> lt = time.localtime()#UTC格式当前时区时间

>>> st = time.strftime("%b %d %a %H:%M:%S %Y %s",lt)格式化时间>>> printst

May20 Mon 15:54:34 2013 1369036474

具体的参数如下表,翻译源自:python官方文档

标识

含义

举例

%a

星期简写

Mon

%A

星期全称

Monday

%b

月份简写

Mar

%B

月份全称

March

%c

适合语言下的时间表示

May Mon May 20 16:00:02 2013

%d

一个月的第一天,取值范围: [01,31].

20

%H

24小时制的小时,取值范围[00,23].

17

%I

12小时制的小时,取值范围 [01,12].

10

%j

一年中的第几天,取值范围 [001,366].

120

%m

十进制月份,取值范围[01,12].

50

%M

分钟,取值范围 [00,59].

50

%p

上、下午,AM 或 PM.

PM

%S

秒,取值范围 [00,61].

30

%U

这一年的星期数(星期天为一个星期的第一天,开年的第一个星期天之前的天记到第0个星期)趋势范围[00,53].

20

%w

星期的十进制表示,取值范围 [0(星期天),6].

1

%W

这一年的星期数(星一为一个星期的第一天,开年的第一个星期一之前的天记到第0个星期)趋势范围[00,53].

20

%x

特定自然语言下的日期表示

05/20/13

%X

特定自然语言下的时间表示

16:00:02

%y

年的后两位数,取值范围[00,99].

13

%Y

完整的年

2013

%Z

时区名

CST(China Standard Time)

%%

%字符

%

11)CPU时钟时间clock(),它反映了程序运行的实际时间,使用它做性能测试更准确

importtimefor i in range(5):print time.time(),'\t',time.clock()

a= i*3.14

for j in range(4000000):

a+= j-i

在ubuntu中的输出为下:

>>>

1369040214.11 0.01

1369040214.97 0.87

1369040215.76 1.67

1369040216.56 2.46

当程序休眠时,CPU不工作,time.clock()的值不会增加(具体与操作系统有关):

importtimefor i in range(5):printtime.time(),time.clock()print "sleep",i

time.sleep(i)

在Ubuntu下输出结果为:

1369040510.93 0.02sleep 01369040510.93 0.02sleep1

1369040511.93 0.02sleep2

1369040513.94 0.02sleep3

1369040516.94 0.02sleep4

注:在windows下面time.clock()的值会增加

2 、日期和时间管理--datetime

1)datetime中中的时间由time表示:可以用datetime.time()直接构造时间,不过参数必须在指定范围内:

>>> importdatetime>>> print datetime.time(18,20,56)#构造时间

18:20:56

>>> printdatetime.time.min,datetime.time.max,datetime.time.resolution00:00:00 23:59:59.999999 0:00:00.000001

2)日期由date表示,today()可以获得今天的日期,其中的年、月、日都可以替换

>>> d = datetime.date(1998,2,5)#构造日期

>>>d

datetime.date(1998, 2, 5)#日期最小值,最大值,精度

>>> printdatetime.date.min,datetime.date.max,datetime.date.resolution0001-01-01 9999-12-31 1 day, 0:00:00

>>> today = datetime.date.today()#生成今天的日期

>>> printtoday2013-05-20

>>> print today.replace(day=19)#替换日

2013-05-19

>>> print today.replace(month=3)#替换月

2013-03-20

>>> print today.replace(year=2003)#替换年

2003-05-20

3)时间段datedelta,datedelta可以表示星期、日、小时、分钟、秒、毫秒、微秒:

>>> print datetime.timedelta(weeks=1)#一个星期

7 days, 0:00:00

>>> print datetime.timedelta(days=1)#一天

1 day, 0:00:00

>>> print datetime.timedelta(hours=1)#一小时

1:00:00

>>> print datetime.timedelta(minutes=1)#1分钟

0:01:00

>>> print datetime.timedelta(seconds=1)#一秒

0:00:01

>>> print datetime.timedelta(milliseconds=1)#一毫秒

0:00:00.001000

>>> print datetime.timedelta(microseconds=1)#一微秒

0:00:00.000001

注意timedelta的内部值是用日、秒、微秒存储。

>>> delta = datetime.timedelta(weeks=1,days=1,hours=1,minutes=1,seconds=1,milliseconds=1,microseconds=1)>>>delta

datetime.timedelta(8, 3661, 1001)

利用时间段可以很方便的进行时间和日期运算:

>>> today =datetime.date.today()>>> print '今天:',today

今天:2013-05-20

>>> oneday = datetime.timedelta(days=1)#一天

>>> yesterday = today - oneday#昨天

>>> print '昨天:',yesterday

昨天:2013-05-19

>>> tomorrow = today + oneday#明天

>>> print "明天:",tomorrow

明天:2013-05-21

>>> print tomorrow - yesterday#时间作差

2 days, 0:00:00

>>> print yesterday -tomorrow-2 days, 0:00:00

4)时间、时间段可以比较大小,这里不详细介绍。

5)日期和时间结合,datetime中的datetime,即datetime.datetime存储了时间和日期

>>> print '现在:',datetime.datetime.now()

现在:2013-05-20 19:36:36.385627

>>> print '今天:',datetime.datetime.today()

今天:2013-05-20 19:37:15.515159

>>> print 'UTC:',datetime.datetime.utcnow()

UTC:2013-05-20 11:37:54.000763

上面创建的datetime实例都可以用getattr()解析:

#解析时间

importdatetime

now=datetime.datetime.now()

items= ['year','month','day','hour','minute','second','microsecond']for attr initems:print '%12s: %s' % (attr,getattr(now,attr))

输出结果:

>>>year:2013month:5day:20hour:19minute:44second:41microsecond:466798

可以使用date和time结合成一个datetime

>>> t = datetime.time(20,1,4)#赖你一世

>>> d = datetime.date.today()#赖你一生吾赖你

>>> dt =datetime.datetime.combine(d,t)>>> printdt2013-05-20 20:01:04

3、Calendar处理日期,管理面向年、月、周的时间。

Calendar定义了三个类Calendar、TextCalendar和HTMLCalendar

利用TextCalendar的prmonth()可以生成一个格式化的日历

c =calendar.TextCalendar(calendar.SUNDAY)>>> c.prmonth(2012,5)

May2012Su Mo Tu We Th Fr Sa1 2 3 4 5

6 7 8 9 10 11 12

13 14 15 16 17 18 19

20 21 22 23 24 25 26

27 28 29 30 31

利用HTMLCalendar和formatmonth()也可以生成这样的日历,只是有一些HTML标签,保存成HTML,在浏览器下打开就可以看到了

HTMLCalendar在处理一些重复性日期时比较方便,假设公司每个月第二周的周二要开一次会议,现在要计算今天这一年开会的日期:

importcalendarfor month in range(1,13):#遍历每个月份

c = calendar.monthcalendar(2013,month)

firstweek=c[0]

secondweek= c[1]

thirdweek= c[2]if firstweek[calendar.TUESDAY]:#如果第0个星期有星期二,第1个星期二就该开会

meetingdate =secondweek[calendar.TUESDAY]else:

meetingdate=thirdweek[calendar.TUESDAY]print '%5s: %2s' % (calendar.month_abbr[month],meetingdate)

输出的开会日期是:

>>>

Jan: 8Feb:12Mar:12Apr:9May:14Jun:11Jul:9Aug:13Sep:10Oct:8Nov:12Dec:10

补充,字符串时间转成数值型时间

将"2011-09-28 10:00:00"转化为时间戳

time.mktime(time.strptime(a,'%Y-%m-%d %H:%M:%S'))>>1317091800.0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值