Python 时间模块学习

time 模块

内置的 time 模块让 Python
程序能读取系统时钟的当前时间。在 time 模块中,time.time()和 time.sleep()函数是
最有用的模块。

time.time()
time.time()函数返回自那一刻以来的秒数,是一个浮点值(回想一下,浮
点值只是一个带小数点的数)。这个数字称为 UNIX 纪元时间戳

import time
time.time()
1553691712.3520856

纪元时间戳可以用于剖析代码,也就是测量一段代码的运行时间。如果在代码块开
始时调用 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 3.679748773574829 seconds to calculate.

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

time.sleep(5)

数字四舍五入
在处理时间时,你会经常遇到小数点后有许多数字的浮点值。为了让这些值更
易于处理,可以用 Python 内置的 round()函数将它们缩短,该函数按照指定的精度
四舍五入到一个浮点数。只要传入要舍入的数字,再加上可选的第二个参数,指明
需要传入到小数点后多少位。如果省略第二个参数,round()将数字四舍五入到最接
近的整数。在交互式环境中输入以下代码:

>>> import time
>>> now = time.time()
>>> now
1425064108.017826
>>> round(now, 2) #2表示传到小数点后2位,因为第三位是7所以进一
1425064108.02
>>> round(now, 4)
1425064108.0178#2表示传到小数点后4位,因为第五位是2所以不进
>>> round(now)#没有数字,表示将数字四舍五入到最接近的整数
1425064108

datetime 模块

time 模块用于取得 Unix 纪元时间戳,并加以处理。但是,如果以更方便的格
式显示日期,或对日期进行算术运算(例如,搞清楚 205 天前是什么日期,或 123
天后是什么日期),就应该使用 datetime 模块。
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)

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)

datetime 对象可以用比较操作符进行比较,弄清楚谁在前面。后面的datetime 对象
是“更大”的值。在交互式环境中输入以下代码:

>>> halloween2015 = datetime.datetime(2015, 10, 31, 0, 0, 0)
>>> newyears2016 = datetime.datetime(2016, 1, 1, 0, 0, 0)
>>> oct31_ _2015 = datetime.datetime(2015, 10, 31, 0, 0, 0)
>>> halloween2015 == oct31_ _2015
True
>>> halloween2015 > newyears2016
False
>>> newyears2016 > halloween2015
True
>>> newyears2016 != oct31_ _2015
True

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'

将 datetime 对象转换为字符串

Unix 纪元时间戳和 datetime 对象对人类来说都不是很友好可读。利用 strftime()方
法,可以将datetime 对象显示为字符串。(strftime()函数名中的f 表示格式,format)。
该的 strftime()方法使用的指令类似于 Python 的字符串格式化。表 15-1 列出了完
整的 strftime()指令。表 15-1 strftime()指令

在这里插入图片描述
向 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 日下午 4 点 29 分,保
存在 oct21st 中。向 strftime()传入定制的格式字符串’%Y/%m/%d %H:%M:%S,返回
一个字符串,包含以斜杠分隔的 2015、10 和 21,以冒号分隔的 16、29 和 00。传
入’%I:%M% p’则返回’04:29 PM’,传入"%B of '%y"则返回"October of '15"。请注意,
strftime()不是以 datetime.datetime 开始。

将字符串转换成 datetime 对象

如果有一个字符串的日期信息,如’2015/10/21 16:29:00’或’October 21, 2015’,需
要将它转换为 datetime 对象,就用 datetime.datetime.strftime()函数。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)

要从字符串’October 21, 2015’取得一个 datetime 对象,将’October 21, 2015’作为
第一个参数传递给 strptime(),并将对应于’October 21, 2015’ 的定制格式字符串作为
第二个参数。带有日期信息的字符串必须准确匹配定制的格式字符串,否则 Python
将抛出 ValueError 异常。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值