计算机的系统时钟设置为特定的日期、时间和时区。内置的 time 模块让 Python程序能读取系统时钟的当前时间。在 time 模块中, time.time()和 time.sleep()函数是最有用的模块。
time模块
time.time()函数
Unix 纪元是编程中经常参考的时间: 1970 年 1 月 1 日 0 点,即协调世界时( UTC)。
time.time()函数
返回自那一刻以来的秒数,是一个浮点值(回想一下,浮点值只是一个带小数点的数)。这个数字称为 UNIX 纪元时间戳。
纪元时间戳可以用于剖析代码,也就是测量一段代码的运行时间。如果在代码块开始时调用time.time(), 并在结束时再次调用,就可以用第二个时间戳减去第一个,得到这两次调用之间经过的时间。
import
time
def
calcProd
(
)
:
# Calculate the product of the first 100,000 numbers.
product
=
1
for
i
in
range
(
1
,
100000
)
:
product
=
product
*
i
return
product
startTime
=
time
.
time
(
)
prod
=
calcProd
(
)
endTime
=
time
.
time
(
)
print
(
'The result is %s digits long.'
%
(
len
(
str
(
prod
)
)
)
)
print
(
'Took %s seconds to calculate.'
%
(
endTime
-
startTime
)
)
输出:
The result is 456569 digits long.
Took 10.653937101364136 seconds to calculate.
time.sleep()函数
如果需要让程序暂停一下,就调用 time.sleep()函数,并传入希望程序暂停的秒数
>>
>
import
time
>>
>
for
i
in
range
(
3
)
:
print
(
'Tick'
)
time
.
sleep
(
1
)
print
(
'Tock'
)
time
.
sleep
(
1
)
time.gmtime([secs])
将 seconds since the epoch 为单位的时间转换为UTC的 struct_time ,其中dst标志始终为零。如果未提供 secs 或为 None ,则使用由 time() 返回的当前时间。忽略一秒的分数。
time.localtime([secs])
与 gmtime() 相似但转换为当地时间。如果未提供 secs 或为 None ,则使用由 time() 返回的当前时间。当 DST 适用于给定时间时,dst标志设置为 1 。
localtime([seconds]) -> (tm_year,tm_mon,tm_mday,tm_hour,tm_min, tm_sec,tm_wday,tm_yday,tm_isdst)
import
time
t
=
time
.
localtime
(
)
print
(
'年:%s\t月:%s\t日:%s'
%
(
t
.
tm_year
,
t
.
tm_mon
,
t
.
tm_mday
)
)
输出:
年:
2019
月:
6
日:
19
strftime(format[, tuple]) -> string:
将结构化时间转化为字符串时间
- format:为格式化的时间格式,
- p_tuple为格式化时间
print
(
time
.
strftime
(
'%Y-%m-%d'
,
time
.
localtime
(
)
)
)
输出:
2019
-
06
-
19
strptime(string, format) -> struct_time
字符串时间转化为格式化时间
#------将字符串时间转成结构化时间strptime
print
(
time
.
strptime
(
"2016:12:24:17:50:36"
,
"%Y:%m:%d:%X"
)
)
asctime([tuple]) -> string
When the time tuple is not present, current time as returned by localtime()
ctime(seconds) -> string
print
(
time
.
asctime
(
)
)
print
(
time
.
ctime
(
)
)
输出:
Wed Jun
19
16
:
05
:
21
2019
Wed Jun
19
16
:
05
:
21
2019
了解更多,请参考官方文档
datetime 模块
time 模块用于取得 Unix 纪元时间戳,并加以处理。但是,如果以更方便的格式显示日期,或对日期进行算术运算(例如,搞清楚 205 天前是什么日期,或 123天后是什么日期),就应该使用 atetime 模块。
datetime 模块有自己的 datetime 数据类型。 datetime 值表示一个特定的时刻。
>>
>
import
datetime
>>
>
datetime
.
datetime
.
now
(
)
datetime
.
datetime
(
2015
,
2
,
27
,
11
,
10
,
49
,
55
,
53
)
>>
>
dt
=
datetime
.
datetime
(
2015
,
10
,
21
,
16
,
29
,
0
)
>>
>
dt
.
year
,
dt
.
month
,
dt
.
day
(
2015
,
10
,
21
)
>>
>
dt
.
hour
,
dt
.
minute
,
dt
.
second
(
16
,
29
,
0
)
调用
datetime.datetime.now()
返回一个 datetime 对象,表示当前的日期和时间,根据你的计算机的时钟。这个对象包含当前时刻的年、月、日、时、分、秒和微秒。也可以利用
datetime.datetime()函数
,向它传入代表年、月、日、时、分、秒的整数,得到特定时刻的 datetime 对象。这些整数将保存在 datetime 对象的 year、month、 day、 hour、 minute 和 second属性中。
Unix 纪元时间戳可以通过
datetime.datetime.fromtimestamp()
转换为 datetime对象。 datetime 对象的日期和时间将根据本地时区转换。
>>
>
datetime
.
datetime
.
fromtimestamp
(
1000000
)
datetime
.
datetime
(
1970
,
1
,
12
,
5
,
46
,
40
)
>>
>
datetime
.
datetime
.
fromtimestamp
(
time
.
time
(
)
)
datetime
.
datetime
(
2015
,
2
,
27
,
11
,
13
,
0
,
604980
)
timedelta 数据类型
datetime 模块还提供了 timedelta 数据类型,它表示一段时间,而不是一个时刻。
>>
>
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'
要
创建 timedelta 对象
,就用
datetime.timedelta()函数
。 datetime.timedelta()函数接受关键字参数 weeks、 days、 hours、 minutes、 seconds、 milliseconds 和 microseconds。没有 month 和 year 关键字参数,因为“月”和“年”是可变的时间,依赖于特定月份或年份。 timedelta 对象拥有的总时间以天、秒、微秒来表示。这些数字分别保存在 days、 seconds 和 microseconds 属性中。 total_seconds()方法返回只以秒表示的时间。将一个 timedelta 对象传入 str(),将返回格式良好的、人类可读的字符串表示。
将 datetime 对象转换为字符串
Unix 纪元时间戳和 datetime 对象对人类来说都不是很友好可读。利用
strftime()方法
,可以将 datetime 对象显示为字符串。(strftime()函数名中的 f 表示格式, format)。
向 strftime()传入一个定制的格式字符串,其中包含格式化指定(以及任何需要的斜线、冒号等), strftime()将返回一个格式化的字符串,表示 datetime 对象的信息。
>>
>
oct21st
=
datetime
.
datetime
(
2015
,
10
,
21
,
16
,
29
,
0
)
>>
>
oct21st
.
strftime
(
'%Y/%m/%d %H:%M:%S'
)
'2015/10/21 16:29:00'
>>
>
oct21st
.
strftime
(
'%I:%M %p'
)
'04:29 PM'
>>
>
oct21st
.
strftime
(
"%B of '%y"
)
"October of '15"
将字符串转换成 datetime 对象
如果有一个字符串的日期信息,如’2015/10/21 16:29:00’或’October 21, 2015’,需要将它转换为 datetime 对象,就用 datetime.datetime.strptime()函数。
strptime()函数
与strftime()方法相反。定制的格式字符串使用相同的指令,像 strftime()一样。必须将格式字符串传入 strptime(),这样它就知道如何解析和理解日期字符串( strptime()函数名中 p 表示解析, parse)。
>>
>
datetime
.
datetime
.
strptime
(
'October 21, 2015'
,
'%B %d, %Y'
)
datetime
.
datetime
(
2015
,
10
,
21
,
0
,
0
)
>>
>
datetime
.
datetime
.
strptime
(
'2015/10/21 16:29:00'
,
'%Y/%m/%d %H:%M:%S'
)
datetime
.
datetime
(
2015
,
10
,
21
,
16
,
29
)
>>
>
datetime
.
datetime
.
strptime
(
"October of '15"
,
"%B of '%y"
)
datetime
.
datetime
(
2015
,
10
,
1
,
0
,
0
)
>>
>
datetime
.
datetime
.
strptime
(
"November of '63"
,
"%B of '%y"
)
datetime
.
datetime
(
2063
,
11
,
1
,
0
,
0
)