如何让Python datetime模块准确显示其他时区?PST转换问题求助
加密货币机器人时区转换问题解决方案
一、手动计算的简洁修复
你的手动转换逻辑没有正确处理负数和跨天情况,用模24运算可以一次性覆盖所有时间段,无需复杂条件判断:
from datetime import datetime current_time = datetime.now() # 你提到该时间比PST早7小时,假设为UTC时间 # 计算PST的24小时制小时数,模24自动处理负数和跨天 pst_hour_24 = (current_time.hour - 7) % 24 # 转换为12小时制 pst_hour_12 = pst_hour_24 % 12 # 处理0点(转为12)和AM/PM标识 pst_hour_12 = 12 if pst_hour_12 == 0 else pst_hour_12 period = "AM" if pst_hour_24 < 12 else "PM" # 输出完整时间(保留分钟) print(f"PST时间: {pst_hour_12}:{current_time.minute:02d} {period}")
这个逻辑不管current_time.hour是0-23的任何值,都能得到正确的PST时间,无需构建数值映射表。
二、规范的时区处理方案(推荐)
手动计算时区极易出错(比如夏令时切换),Python标准库提供了可靠的时区支持:
Python 3.9+ 内置方案(无需额外安装)
使用zoneinfo模块直接调用IANA时区数据库,自动处理夏令时:
from datetime import datetime import zoneinfo # 选择太平洋时区(自动切换PST/PDT) pst_tz = zoneinfo.ZoneInfo("America/Los_Angeles") # 获取当前带时区信息的PST时间 current_pst = datetime.now(pst_tz) # 格式化输出(12小时制带时区标识) formatted_time = current_pst.strftime("%I:%M:%S %p %Z") print(formatted_time) # 示例:09:15:30 AM PST # 24小时制输出 formatted_time_24 = current_pst.strftime("%H:%M:%S %Z") print(formatted_time_24) # 示例:09:15:30 PST
旧版本Python(3.8及以下)
安装pytz库(pip install pytz)后使用:
from datetime import datetime import pytz pst_tz = pytz.timezone("America/Los_Angeles") current_pst = datetime.now(pst_tz) # 格式化方式与上述一致
使用标准时区方法的核心优势是自动适配夏令时规则,无需手动调整时差,完全符合国际时区规范,从根源避免手动计算的各种bug。
内容的提问来源于stack exchange,提问作者Alexander Tomsovic
相关产品推荐
相关产品推荐

