如何用Python正确比较12小时制下的当前时间与截止时间
技术百科
花韻仙語
发布时间:2026-01-27
浏览: 次 本文教你用标准库`datetime.strptime()`精准解析并比较am/pm格式的时间,避免手动转换时因12点(如12:3

在处理12小时制时间(如 12:37 AM、9:00 AM)的比较任务时,手动转换小时值极易出错——尤其是对 12 AM(对应0时)和 12 PM(对应12时)的特殊处理。你提供的代码中多次修改 due_hour(如 due_hour -= 11),不仅逻辑混乱,还导致 12:37 AM 被错误映射为 1 AM,从而在 current_hour == 1 与 due_hour == 9 比较时跳过分钟判断,直接输出 "False",违背预期。
推荐使用 Python 内置的 datetime.strptime() 方法,它专为解析带格式的时间字符串设计,能自动、准确地将 12:37 AM → 00:37、12:00 PM → 12:00、1:15 PM → 13:15 等全部情况标准化为24小时制的 datetime 对象,后续只需直接比较大小即可。
✅ 正确实现示例:
import datetime as dt
# 假设输入变量如下(示例值:当前 12:37 AM,截止 9:00 AM)
current_hour = 12
current_minute = 37
current_section = "AM"
due_hour = 9
due_minute = 0
due_section = "AM"
# 构造标准时间字符串并解析(注意格式符:%I 表示12小时制小时,%M 分钟,%p 表示AM/PM)
try:
current = dt.datetime.strptime(f"{current_hour}:{current_minute:02d} {current_section}", "%I:%M %p")
due = dt.datetime.strptime(f"{due_hour}:{due_minute:02d} {due_section}", "%I:%M %p")
# 直接比较:若当前时间早于截止时间,则仍可提交
is_eligible = current < due
print("True" if is_eligible else "False") # 输出:True ✅
except ValueError as e:
print("时间格式错误,请检查输入:", e)? 关键说明:
- %I:必须使用大写 I(代表12小时制,范围 01–12),不可用 %H(24小时制);
- :02d:确保分钟始终为两位数(如 0 → "00"),避免 strptime 解析失败;
- strptime 自动处理所有边界情况:12:00 AM → 00:00,12:00 PM → 12:00,1:00 PM → 13:00;
- 比较操作符
⚠️ 注意事项:
- 该方法忽略日期(年月日),仅比较当日时间。若需跨日判断(如截止时间为次日 8:00 AM),需额外处理日期偏移;
- 输入变量应确保 current_section / due_section 为全大写 "AM" 或 "PM"(strptime 对大小写敏感);
- 建议添加 try-except 捕获格式异常,增强程序鲁棒性。
总结:与其在手动进位、减法和条件分支中反复调试(尤其易错的12点逻辑),不如交由成熟的标准库完成解析。一行 strptime 调用,即可让时间比较变得简洁、可靠、可维护。
# 尤其是
# 而在
# python
# 不可用
# 只需
# 推荐使用
# 跳过
# 专为
# 次日
# 对象
# 标准库
# 字符串
# 时间为
# try
# 极易
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- php在Linux怎么部署_LNMP环境搭建PHP
- mac本地php环境如何开启curl_curl扩展
- Python装饰器复用技巧_通用能力解析【教程】
- Mac如何开启夜览模式_Mac护眼模式设置与定时
- PythonFastAPI项目实战教程_API接口
- 静态属性修改会影响所有实例吗_php作用域操作符下
- Win11怎么设置虚拟桌面 Win11新建多桌面切
- C#如何使用Channel C#通道实现异步通信
- Win11怎么查看激活状态_查询Windows 1
- Windows10如何更改鼠标图标_Win10鼠标
- Win11如何设置自动关机 Win11定时关机命令
- Win10怎么卸载鲁大师_Win10彻底卸载鲁大师
- Win11如何设置系统语言_Win11系统语言切换
- c++如何利用doxygen生成开发文档_c++
- VSC里PHP变量未定义报错怎么解决_错误抑制技巧
- Python对象比较与排序_集合使用说明【指导】
- 如何在 Go 后端安全获取并验证前端存储的 JWT
- Mac如何将HEIC图片格式转为JPG_Mac批量
- Golang如何测试HTTP中间件_Golang
- 如何在Golang中优化文件读写性能_使用缓冲和并
- php订单日志权限怎么设_php订单日志文件权限设
- Win11怎么关闭专注助手 Win11关闭免打扰模
- c++输入输出流 c++ cin与cout格式化输
- Windows10如何更改日期格式_Win10区域
- Win11怎样激活系统密钥_Win11系统密钥激活
- c++怎么处理多线程死锁_c++ lock_gua
- Windows10如何更改任务栏高度_Win10解
- Windows蓝屏BAD_POOL_HEADER故
- php能控制zigbee模块吗_php通过串口与c
- Windows10如何更改盘符名称_Win10重命
- Win11怎么清理C盘系统错误报告_Win11清理
- php下载安装选zip还是msi格式_两种安装包对
- MySQL 中使用 IF 和 CASE 实现查询字
- Go 中实现 Python urllib.quot
- c++怎么编写动态链接库dll_c++ __dec
- 网站内页做seo排名怎么做?
- c++ stringstream用法详解_c++字
- windows如何备份注册表_windows导出和
- Windows10系统怎么查看CPU核心数_Win
- Win11怎么更改鼠标指针_Windows 11自
- Win11无法拖拽文件到任务栏怎么办_Win11开
- PHP主流架构如何处理会话管理_Session与C
- Golang如何遍历目录文件_Golang fil
- 如何使用Golang实现容器自动化运维_Golan
- C++如何解析JSON数据?(nlohmann/j
- Win11怎么查看电脑配置_Win11硬件配置详细
- PHP 中 require() 语句返回值的用法详
- Windows家庭版如何开启组策略(gpedit.
- 如何用::实现单例模式_php静态方法与作用域操作
- Win11怎么设置快速访问_Windows11文件

QQ客服