Python标准库学习笔记4:日期和时间

1. time---时钟时间

作用:管理时钟时间的函数

Python版本:1.4及以后版本

    time模块提供了一些用于管理日期和时间的C库函数.

1. 钟表时间

    time模块的核心函数之一是time(),它会把纪元开始以来的秒数作为一个浮点值返回.

>>> import time
>>> time.time()
1425368942.161
    浮点数用于存储或比较日期很有用,但是ctime更适合记录或打印时间:
>>> time.ctime()
'Tue Mar 03 15:50:15 2015'
>>> time.ctime(time.time() + 15)
'Tue Mar 03 15:51:03 2015'

2. 处理器时钟时间

    clock()返回处理器时钟时间,通常用于性能测试,基准测试等.而如果程序什么都没有做(如调用sleep函数),则clock则不会增加时间:

备注:测试的结果却有影响(书上可能有误!)

import time

for i in range(5):
    #a = range(10000)
    print '%s %0.2f %0.2f' % (time.ctime(),
                              time.time(),
                              time.clock())
    time.sleep(2)   #sleep 2s
    解释器显示如下:
>>> 
Tue Mar 03 15:59:30 2015 1425369570.85 0.00
Tue Mar 03 15:59:32 2015 1425369572.85 2.00
Tue Mar 03 15:59:34 2015 1425369574.85 4.00
Tue Mar 03 15:59:36 2015 1425369576.85 6.00
Tue Mar 03 15:59:38 2015 1425369578.86 8.02

3. 时间组成

    有时候我们需要用到具体的时间如:年,月,日,时,分,秒等.time模块定义了struct_time来维护日期和时间值:

import time

def show_struct(s):
    print 'tm_year:', s.tm_year
    print 'tm_mon:', s.tm_mon
    print 'tm_mday:', s.tm_mday
    print 'tm_hour:', s.tm_hour
    print 'tm_min:', s.tm_min
    print 'tm_sec:', s.tm_sec
    print 'tm_wday:', s.tm_wday
    print 'tm_yday:', s.tm_yday
    print 'tm_isdst:', s.tm_isdst

print 'gmtime:'
show_struct(time.gmtime())
print '\nlocaltime:'
show_struct(time.localtime())
print '\nmktime:', time.mktime(time.localtime())
    解释器显示如下:
>>> 
gmtime:
tm_year: 2015
tm_mon: 3
tm_mday: 3
tm_hour: 8
tm_min: 4
tm_sec: 54
tm_wday: 1
tm_yday: 62
tm_isdst: 0

localtime:
tm_year: 2015
tm_mon: 3
tm_mday: 3
tm_hour: 16
tm_min: 4
tm_sec: 54
tm_wday: 1
tm_yday: 62
tm_isdst: 0

mktime: 1425369894.0

4. 处理时区

    要改变时区,需要设置环境变量TZ,然后调用tzset().

备注:在Python2.7中time模块无tzset()方法!

5. 解析和格式化时间

    我们可以使用strptime()和strftime()在struct_time和时间值字符串表示之间进行转换:

import time

def show_struct(s):
    print 'tm_year:', s.tm_year
    print 'tm_mon:', s.tm_mon
    print 'tm_mday:', s.tm_mday
    print 'tm_hour:', s.tm_hour
    print 'tm_min:', s.tm_min
    print 'tm_sec:', s.tm_sec
    print 'tm_wday:', s.tm_wday
    print 'tm_yday:', s.tm_yday
    print 'tm_isdst:', s.tm_isdst

now = time.ctime()
print 'Now:', now
parsed = time.strptime(now)
print '\nParsed:'
show_struct(parsed)

print '\nFormatted:', time.strftime("%a %b %d %H:%M:%S %Y", parsed)
    解释器显示如下:
>>> 
Now: Tue Mar 03 16:16:42 2015

Parsed:
tm_year: 2015
tm_mon: 3
tm_mday: 3
tm_hour: 16
tm_min: 16
tm_sec: 42
tm_wday: 1
tm_yday: 62
tm_isdst: -1

Formatted: Tue Mar 03 16:16:42 2015

2. datetime---日期和时间值管理

作用:datetime模块包含一些函数和类,用于完成日期和时间解析,格式化和算术运算

Python版本:2.3及以后版本

1. 时间

    时间值用time类表示.time实例包含hour,minute,second和microsecond属性,还可以包含时区信息:

>>> import datetime
>>> t = datetime.time(1, 2, 3)
>>> t.hour
1
>>> t.minute
2
>>> t.second
3
>>> t.microsecond
0
>>> t.tzinfo
>>> datetime.time.min
datetime.time(0, 0)
>>> datetime.time.max
datetime.time(23, 59, 59, 999999)
>>> datetime.time.resolution
datetime.timedelta(0, 0, 1)

2. 日期

    日历日期值用date类表示.date实例包含year,month和day属性.使用today()类方法很容易创建一个表示当前日期的日期实例:


import datetime

today = datetime.date.today()
print today
print 'ctime:', today.ctime()
tt = today.timetuple()
print 'tm_year:', tt.tm_year
print 'tm_mon:', tt.tm_mon
print 'tm_mday:', tt.tm_mday
print 'tm_hour:', tt.tm_hour
print 'tm_min:', tt.tm_min
print 'tm_sec:', tt.tm_sec
print 'tm_wday:', tt.tm_wday
print 'tm_yday:', tt.tm_yday
print 'tm_isdst:', tt.tm_isdst
print 'ordinal:', today.toordinal()
print 'Year:', today.year
print 'Mon:', today.month
print 'Day:', today.day
    解释器显示如下:



>>> 
2015-03-04
ctime: Wed Mar  4 00:00:00 2015
tm_year: 2015
tm_mon: 3
tm_mday: 4
tm_hour: 0
tm_min: 0
tm_sec: 0
tm_wday: 2
tm_yday: 63
tm_isdst: -1
ordinal: 735661
Year: 2015
Mon: 3
Day: 4
    我们可以使用min和max属性确定所支持的日期值范围:



import datetime

print 'Earliest :', datetime.date.min
print 'Latest :', datetime.date.max
print 'Resolution:', datetime.date.resolution
    解释器显示如下:



>>> 
Earliest : 0001-01-01
Latest : 9999-12-31
Resolution: 1 day, 0:00:00
    创建新的date实例还有一种方法,可以使用一个现有date的replace()方法创建:



import datetime

d1 = datetime.date(2008, 3, 29)
print 'd1:', d1.ctime()
d2 = d1.replace(year = 2009)
print 'd2:', d2.ctime()
    解释器显示如下:



>>> 
d1: Sat Mar 29 00:00:00 2008
d2: Sun Mar 29 00:00:00 2009


3. timedelta

    通过对两个datetime对象使用算术运算,或者结合使用一个datetime和一个timedelta,可以计算出将来和过去的一些日期.


import datetime

for delta in [datetime.timedelta(microseconds=1),
              datetime.timedelta(milliseconds=1),
              datetime.timedelta(seconds=1),
              datetime.timedelta(minutes=1),
              datetime.timedelta(hours=1),
              datetime.timedelta(days=1),
              datetime.timedelta(weeks=1),]:
    print '%15s = %s seconds' % (delta, delta.total_seconds())
    解释器显示如下:



>>> 
 0:00:00.000001 = 1e-06 seconds
 0:00:00.001000 = 0.001 seconds
        0:00:01 = 1.0 seconds
        0:01:00 = 60.0 seconds
        1:00:00 = 3600.0 seconds
 1 day, 0:00:00 = 86400.0 seconds
7 days, 0:00:00 = 604800.0 seconds


4. 日期算术运算

    日期算术元素按使用标准算术操作符来完成:


import datetime

today = datetime.date.today()
print 'Today :', today
one_day = datetime.timedelta(days=1)
print 'one day:', one_day

yesterday = today - one_day
print 'Yesterday:', yesterday
tomorrow = today + one_day
print 'tomorrow:', tomorrow

print
print 'tomorrow - yesterday:', tomorrow - yesterday
print 'yesterday - tomorrow:', yesterday - tomorrow
    解释器显示如下:



>>> 
Today : 2015-03-04
one day: 1 day, 0:00:00
Yesterday: 2015-03-03
tomorrow: 2015-03-05

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


5. 比较值

    日期和时间值都可以使用标准比较操作符来比较,确定哪一个在前或在后:


>>> import datetime
>>> import time
>>> t1 = datetime.time(12, 55, 0)
>>> t2 = datetime.time(13, 5, 0)
>>> t1 < t2
True
>>> d1 = datetime.date.today()
>>> d2 = datetime.date.today() + datetime.timedelta(days=1)
>>> d1, d2
(datetime.date(2015, 3, 4), datetime.date(2015, 3, 5))
>>> d1 < d2
True


6. 结合日期和时间

    使用datetime类可以存储由日期和时间分量构成的值.


import datetime

print 'Now:', datetime.datetime.now()
print 'Today:', datetime.datetime.today()
print 'UTC Now:', datetime.datetime.utcnow()
print

FIELDS = ['year', 'month', 'day',
          'hour', 'minute', 'second', 'microsecond',
          ]
d = datetime.datetime.now()
for attr in FIELDS:
    print '%15s: %s' % (attr, getattr(d, attr))
    解释器显示如下:



>>> 
Now: 2015-03-04 09:43:17.765000
Today: 2015-03-04 09:43:17.796000
UTC Now: 2015-03-04 01:43:17.812000

           year: 2015
          month: 3
            day: 4
           hour: 9
         minute: 43
         second: 17
    microsecond: 812000


7. 格式化和解析

    可以使用strftime()格式化时间:


import datetime

format = '%a %b %d %H:%M:%S %Y'

today = datetime.datetime.today()
print 'ISO :', today

s = today.strftime(format)
print 'strftime:', s

d = datetime.datetime.strptime(s, format)
print 'strptime:', d.strftime(format)
    解释器显示如下:



>>> 
ISO : 2015-03-04 09:47:22.214000
strftime: Wed Mar 04 09:47:22 2015
strptime: Wed Mar 04 09:47:22 2015


3. calendar---处理日期

作用:calendar模块实现了一些类来处理日期,管理面向年,月和周的值

1. 格式化示例

    prmonth()方法是一个简单的函数,可以生成一个月的格式化文本输出.


>>> import calendar
>>> c = calendar.TextCalendar(calendar.SUNDAY)
>>> c.prmonth(2015, 3)
     March 2015
Su Mo Tu We Th Fr Sa
 1  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


转载于:https://my.oschina.net/voler/blog/382375

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值