time模块

在time模块中,time.time()和time.sleep()函数是最有用的模块。

time.time()函数返回自那一刻以来的秒数,是一个浮点值。

可以通过两次调用time.time(),相减后得到这两次调用之间经过的时间。也可以采用cProfile.run()函数剖析代码。

>>> import time
>>> dir(time)
['CLOCK_MONOTONIC', 'CLOCK_MONOTONIC_RAW', 'CLOCK_PROCESS_CPUTIME_ID', 'CLOCK_REALTIME', 'CLOCK_THREAD_CPUTIME_ID', '_STRUCT_TM_ITEMS', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'altzone', 'asctime', 'clock', 'clock_getres', 'clock_gettime', 'clock_settime', 'ctime', 'daylight', 'get_clock_info', 'gmtime', 'localtime', 'mktime', 'monotonic', 'perf_counter', 'process_time', 'sleep', 'strftime', 'strptime', 'struct_time', 'time', 'timezone', 'tzname', 'tzset']
>>> time.time()
1518951868.44606
>>> t1=time.time()
>>> t=time.time()-t1
>>> print(t)
20.188032150268555


如果需要让函数暂停一下,就调用time.sleep()函数,并传入希望程序暂停的秒数。

在IDLE中按Ctrl-C不会中断time.sleep()调用。IDLE会等待到暂停结束,再抛出KeyboardInterrupt异常。

利用一个while循环,配合time.sleep()函数,可以让程序暂停,直到一个特定的日期。

>>> import time
>>> for i in range(3):
...     print(time.time())
...     time.sleep(1)
...     print(time.time())
...     time.sleep(10)
... 
1518952469.0750868
1518952470.076255
1518952480.08646
1518952481.0876613
1518952491.097851
1518952492.0990806
>>>


使用内置的round()函数可以进行数字的四舍五入,可以精确控制时间的精度。

>>> import time
>>> now=time.time()
>>> now
1518952700.4760277
>>> round(now,2)
1518952700.48
>>> round(now,4)
1518952700.476
>>> round(now)
1518952700


datetime模块

从time模块中,可以看到时间可读性较差。datetime模块能以更方便的格式显示日期,或对日期进行算数运算。

datetime模块有自己的datetime数据类型。datetime值表示一个特定的时刻。

datetime对象可以用比较操作符进行比较,得到True/False值。

unix纪元时间戳可以通过datetime.datetime.fromtimestamp(),转换为datetime对象。datetime对象的日期和时间将根据本地时区转换。

>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2018, 2, 18, 19, 22, 32, 105656)
>>> dt=datetime.datetime(2088,8,8,18,28,38,0)
>>> dt.year,dt.month,dt.day
(2088, 8, 8)
>>> dt.hour,dt.minute,dt.second
(18, 28, 38)
>>> datetime.datetime.now() > dt
False


datetime模块还提供了timedelta数据类型,它表示一段时间,而不是一个时刻。

>>> import datetime
>>> delta=datetime.timedelta(days=11,hours=10,minutes=9,seconds=8)
>>> delta.days,delta.seconds,delta.microseconds
(11, 36548, 0)
>>> delta.total_seconds()
986948.0
>>> str(delta)
'11 days, 10:09:08'


算数运算符可以对datetime值进行日期运算。

利用+和-运算符,timedelta对象与datetime对象或其他timedelta对象相加或相减。

利用*和/运算符,timedelta对象可以乘以或除以整数或浮点数。

>>> import datetime
>>> dt=datetime.datetime.now()
>>> dt
datetime.datetime(2018, 2, 18, 19, 33, 22, 97390)
>>> thousandDays=datetime.timedelta(days=1000)
>>> dt+thousandDays
datetime.datetime(2020, 11, 14, 19, 33, 22, 97390)
>>> dt+(2*thousandDays)
datetime.datetime(2023, 8, 11, 19, 33, 22, 97390)


利用strftime()方法,可以将datetime对象显示为字符串。

strptime()函数与strftime()方法相反。

>>> import datetime
>>> dt20180218=datetime.datetime.now()
>>> dt20180218.strftime('%Y/%m/%d %H:%M:%S')
'2018/02/18 19:45:13'
>>> dt20180218.strftime('%I:%M %p')
'07:45 PM'
>>> dt20180218.strftime('%B of %y')
'February of 18'
>>> datetime.datetime.strptime('February 18,2018','%B %d,%Y')
datetime.datetime(2018, 2, 18, 0, 0)