如何用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; ?>
】
相关推荐
- Win11任务栏怎么调到左边_Win11开始菜单居
- PHP主流架构怎么集成Redis缓存_配置步骤【方
- Mac如何使用听写功能_Mac语音输入打字【效率技
- Win10如何卸载预装Edge扩展_Win10卸载
- Win11怎么设置任务栏对齐方式_Windows1
- c++如何利用doxygen生成开发文档_c++
- 如何在 IIS 上为 ASP.NET 6 应用排除
- Windows10如何更改开机密码_Win10登录
- Go 中 := 短变量声明的类型推导机制详解
- Windows 11怎么更改锁屏超时时间_Wind
- 如何在Golang中验证模块完整性_Golangg
- Win11怎么关闭定位服务_保护Win11位置隐私
- 如何使用Golang defer优化性能_减少不必
- win11 OneDrive怎么彻底关闭 Win1
- mac怎么安装字体_MAC添加第三方字体与字体册管
- Win11怎么开启游戏模式_Win11优化游戏帧数
- Win11怎么设置开机密码_Windows11账户
- php485返回空数组怎么回事_php485数据接
- Windows10无法连接到Internet_Wi
- MAC如何设置网卡MAC地址克隆_MAC终端修改物
- Win11如何设置计划任务 Win11定时执行程序
- PythonDocker高级项目部署教程_多容器管
- Win10系统字体模糊怎么办_Windows10高
- Win11快速助手怎么用_Win11远程协助连接教
- Win11任务栏颜色怎么改_Win11自定义任务栏
- Win10怎样卸载DockerDesktop_Wi
- 作用域操作符会影响性能吗_php静态调用性能分析【
- Win11如何开启telnet服务 Win11启用
- Win11怎么关闭边缘滑动手势_Windows11
- Python对象比较与排序_集合使用说明【指导】
- Win10路由器怎么隐藏ssid Win10隐藏w
- 如何在Golang中处理JSON字段缺失_Gola
- Win11输入法切换快捷键怎么改_Windows
- 如何用正则与预处理结合精准拦截拼接式垃圾域名
- Windows11如何设置专注助手_Windows
- 当网站SEO排名下降时,如何应对?
- Win11色盲模式怎么开_Win11屏幕颜色滤镜设
- 如何在Golang中编写异步函数测试_Golang
- Linux如何申请SSL免费证书_Linux下Ce
- 如何从 Go 的 map[string]inter
- Win11怎么设置默认图片查看器_Windows1
- Win10如何优化内存使用_Win10内存优化技巧
- Win11怎么更改管理员名字 Win11修改账户名
- Win11如何关闭游戏模式 Win11禁用Xbox
- Windows10如何删除Windows.old_
- Win11怎么开启专注模式_Windows11时钟
- Windows10如何更改日期格式_Win10区域
- Win11怎么清理C盘系统日志_Win11清理系统
- Win10如何卸载WindowsDefender_
- Python文件管理规范_工程实践说明【指导】

QQ客服