从Scratch到Python 17 时间处理
2023-06-06 11:26:04
我们用Scratch编程的时候经常会处理与时间有关的逻辑,比如控制游戏倒计时,计算程序运行时间,让克隆体间隔一定的时间再出现等,一般用到的指令包括下面这些:

- 获取时间
- 格式化时间
- 暂停程序
一、获取时间
看下面的示例代码:import time
wday_list = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天']
# 获取时间戳
t1 = time.time()
# 将时间戳转换为格式化的时间
t2 = time.localtime(t1)
# 输出时间戳
print(t1)
# 从t2的属性中获取年、月、日、星期、时、分、秒等数据
print('今天是%i年%i月%i日星期%s'%(t2.tm_year,t2.tm_mon,t2.tm_mday,wday_list[t2.tm_wday]))
print('现在时间:%i时%i分%i秒'%(t2.tm_hour, t2.tm_min,t2.tm_sec))
这段代码中,我们先把time()函数的返回值保存到变量t1中,这个返回值是一个时间戳,时间戳是指从1970年1月1日0时0分0秒到你当前运行程序的时间经过的秒数。是不是有点像Scratch中的“计时器”这个变量?但不同的是,Scratch的计时器是从你打开Scratch开始的(除非你使用【重置计时器】,否则它会一直增加)。
由于time()返回的时间戳也是秒数,不容易阅读,所以我们又调用time模块的localtime()函数把t1中保存的时间戳转换成了一个格式化的时间t2,t2具有以下属性:
- tm_year:年
- tm_month:月
- tm_mday:日
- tm_wday:星期,0代表周一,向后依次递增
- tm_hour:时
- tm_min:分
- tm_sec:秒

注意,time.localtime()这个函数接收的是一个时间戳类型的参数,你也可以不传递任何参数,它会自动获取当前时间的时间戳并转换,相当于替你调用了time()函数。
二、格式化时间
上面的例子中我们获得了时间,自己调用格式化输出让时间更易阅读,其实time模块提供了现成的函数strftime(),它可以帮助我们很方便地把localtime()函数返回的时间按照指定格式转化为字符串,看这个例子:import time
now = time.localtime()
t1 = time.strftime('现在时间是:%Y年%m月%d日 %H时%M分%S秒',now)
t2 = time.strftime('%Y-%m-%d %H:%M:%S')
print(t1)
print(t2)
程序运行效果:

| 格式字符 | 含义 |
|---|---|
| %d | 表示日期数,取值范围1-31 |
| %H | 表示24小时制的小时数,取值范围0-23 |
| %I | 表示12小时制的小时数,取值范围1-12 |
| %j | 表示一年中的第几天,取值范围1-366 |
| %m | 表示月份,取值范围1-12 |
| %M | 表示分钟,取值范围0-59 |
| %p | AM或PM,即上午或下午 |
| %S | 表示秒数,取值范围0-59 |
| %w | 表示星期数,取值范围0-6,注意!0为星期日 |
| %W | 表示一年中的第几周,取值范围0-53,周一作为一周第一天,在第一周周一之间的时间被认为在第0周 |
| %y | 两位年份数,取值范围00-99 |
| %Y | 四位年份数 |
| %x | 本地化的日期 |
| %X | 本地化的时间 |
三、“暂停”程序
我们在Scratch中可以使用【等待x秒】暂停程序,time模块提供了sleep()函数可以起到类似的效果。它接收一个数字类型的参数,表示暂停的秒数。看下面这个例子就明白了:import time
while True:
print(time.strftime('%X'))
time.sleep(1)
这段程序的作用是让程序每隔一秒输出一下当前时间(注意到我使用的“%X”参数了吗?),运行效果如下:

四、课后作业
本节我们主要学习了Python标准库中time模块的用法,包括获取时间戳、获取结构化时间、转换时间为格式化的字符串、暂停程序等。请你使用今天所学知识,完成一个番茄钟:- 程序运行时输入番茄名称
- 程序倒计时25分钟后,打印出当前的日期、时间及提示信息,例如:现在是2022年9月5日9点10分,你的番茄钟【写英语作业】已经完成,恭喜你!
微信扫码关注
抖音扫码关注