使用Python datetime模块实现12小时制时钟的问题
解决Python中datetime转换为12小时制时间的问题
你的代码报错是因为直接将完整的datetime对象和整数12比较,两者类型不匹配。datetime对象包含日期、时间等完整信息,需要提取小时部分或使用格式化方法来转换为12小时制。
下面提供两种可行的解决方案:
方法一:使用strftime直接格式化(推荐)
Python的datetime对象自带strftime方法,通过指定格式字符串可以直接输出12小时制时间和日期,无需手动计算:
import time from datetime import datetime from zoneinfo import ZoneInfo while True: # 获取美国东部时区的当前时间 now = datetime.now(ZoneInfo('US/Eastern')) # 格式化字符串:%Y-%m-%d是日期,%I是12小时制小时(01-12),%M分钟,%S秒,%p是AM/PM标识 formatted_clock = now.strftime("%Y-%m-%d %I:%M:%S %p") # 用\r实现同一行刷新显示时钟 print(formatted_clock, end='\r') time.sleep(1)
关键格式说明:
%I:12小时制的小时(范围01-12)%p:自动显示AM(上午)或PM(下午)%Y-%m-%d:年-月-日格式的日期
方法二:手动提取小时转换
如果你想手动处理小时的转换逻辑,可以提取datetime对象的hour属性,再判断转换:
import time from datetime import datetime from zoneinfo import ZoneInfo while True: now = datetime.now(ZoneInfo('US/Eastern')) hour_24 = now.hour # 24小时制转12小时制逻辑 if hour_24 == 0: hour_12 = 12 period = 'AM' elif 1 <= hour_24 < 12: hour_12 = hour_24 period = 'AM' elif hour_24 == 12: hour_12 = 12 period = 'PM' else: hour_12 = hour_24 - 12 period = 'PM' # 格式化输出,确保分钟、秒是两位数 formatted_clock = f"{now.date()} {hour_12}:{now.minute:02d}:{now.second:02d} {period}" print(formatted_clock, end='\r') time.sleep(1)
内容的提问来源于stack exchange,提问作者Liam Norwood
相关产品推荐
相关产品推荐

