当前位置:首页>python>Python小白成长记 · 第15课(上)| 时间、datetime 与多线程

Python小白成长记 · 第15课(上)| 时间、datetime 与多线程

  • 2026-10-11 09:07:15
Python小白成长记 · 第15课(上)| 时间、datetime 与多线程
大家好,我是 星源,一个正在自学 Python 的 19 岁编程小白 🤓。今天我们一起来学习  时间、datetime 与多线程  !

📌 今日学习内容  

👉 “今天我们把 time、datetime、timedelta 全部吃透,再写一个秒表项目!”


✨ 知识点讲解

time 模块  

time.time() 函数  

Unix 纪元是编程中经常参考的时间:1970 年 1 月 1 日 0 点,即协调世界时(UTC)。time.time() 函数返回自那一刻以来的秒数,是一个浮点值。例如,在交互式环境中输入以下代码:

>>>importtime>>>time.time()1425063955.068649

time.sleep() 函数  

如果需要让程序暂停一下,就调用 time.sleep() 函数,并传入希望程序暂停的秒数。在交互式环境中输入以下代码:

>>>importtime>>>foriinrange(3):...print('Tick')...time.sleep(1)...print('Tock')...time.sleep(1)...TickTockTickTockTickTock

数字四舍五入  

在处理时间时,你会经常遇到小数点后有许多数字的浮点值。可以用 Python 内置的 round() 函数将它们缩短,该函数按照指定的精度四舍五入到一个浮点数。在交互式环境中输入以下代码:

>>>importtime>>>now=time.time()>>>now1425064108.017826>>>round(now, 2)1425064108.02>>>round(now, 4)1425064108.0178>>>round(now)1425064108

项目:超级秒表  

需求  

  • 记录从按下回车键开始,每次按键的时间,每次按键都是一个新的“单圈”。  

  • 打印圈数、总时间和单圈时间。

完整代码

#! python3# stopwatch.py - A simple stopwatch program.importtime# Display the program's instructions.print('Press ENTER to begin. Afterwards, press ENTER to "click" the stopwatch. Press Ctrl-C to quit.')input()  # press Enter to beginprint('Started.')startTime=time.time()  # get the first lap's start timelastTime=startTimelapNum=1# Start tracking the lap times.try:whileTrue:input()lapTime=round(time.time() -lastTime, 2)totalTime=round(time.time() -startTime, 2)print('Lap #%s: %s (%s)'% (lapNum, totalTime, lapTime), end='')lapNum+=1lastTime=time.time()  # reset the last lap timeexceptKeyboardInterrupt:# Handle the Ctrl-C exception to keep its error message from displaying.print('\nDone.')

datetime 模块  

timedelta 数据类型  

timedelta 表示“一段时间”,而非某个具体时刻。在交互式环境中输入以下代码:

>>>importdatetime>>>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'

暂停直至特定日期  

用 while + time.sleep(1) 循环检查 datetime.datetime.now() 是否到达目标日期。示例:

importdatetimeimporttimehalloween2016=datetime.datetime(2016, 10, 31, 0, 0, 0)whiledatetime.datetime.now() <halloween2016:time.sleep(1)

将 datetime 对象转换为字符串  

使用 strftime() 方法,支持丰富格式指令:

指令含义
%Y带世纪的年份,例如 '2014'
%y不带世纪的年份,'00' 至 '99'
%m数字表示的月份,'01' 至 '12'
%B完整的月份,例如 'November'
%b简写的月份,例如 'Nov'
%d一月中的第几天,'01' 至 '31'
%j一年中的第几天,'001' 至 '366'
%w一周中的第几天,'0'(周日) 至 '6'(周六)
%A完整的周几,例如 'Monday'
%a简写的周几,例如 'Mon'
%H小时(24 小时时钟),'00' 至 '23'
%I小时(12 小时时钟),'01' 至 '12'
%M分,'00' 至 '59'
%S秒,'00' 至 '59'
%p'AM' 或 'PM'
%%就是 '%' 字符

代码示例:

>>>importdatetime>>>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("It happened on %A, %B %d, %Y")'It happened on Wednesday, October 21, 2015'

将字符串转换成 datetime 对象  

用 datetime.datetime.strptime(),格式字符串必须与输入字符串完全匹配。示例:

>>>importdatetime>>>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)

速查表

函数/方法作用
time.time()返回当前 Unix 纪元时间戳(float)
time.sleep(seconds)让程序暂停 seconds 秒
datetime.datetime.now()返回当前时刻的 datetime 对象
datetime.datetime(year, month, day, hour, minute, second)构造指定时刻
datetime.timedelta(...)构造一段时间
total_seconds()timedelta 转秒数
strftime(format)datetime → 格式化字符串
strptime(time_string, format)格式化字符串 → datetime

✅ 总结  

  1. time 模块 只认“秒数”,适合计时、暂停。  

  2. datetime 模块 支持日期运算、格式化、解析,功能更高级。  

  3. timedelta 可以“日期加减”,再也不用手算闰年。  

  4. 超级秒表项目 把 time.time()、round()、try/except 用到极致,跑一遍就能背下来。  

  5. “速查表”建议打印贴墙,随时翻。  


📢 互动提问  

👉 用 datetime 算“100 天后是星期几”只用一行,你知道怎么写吗?评论区秀代码!

最新文章

随机文章