You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python将用户输入时间及时区转America/New_York时遇UnknownTimeZoneError问题

时区转换代码的UnknownTimeZoneError问题排查与解决

问题背景

需求为:将用户输入的时间及时区转换为America/New_York时区,Python实现的原代码如下:

import datetime
import pytz
user_inp_time  =input("What is your hour? " )
user_inp_tz   = input("Your time zone is? ") #input Europe/Chisinau

user_time     = datetime.datetime.strptime(user_inp_time,"%H:%M")
user_tz       = pytz.timezone(user_inp_tz)

tz2= ('America/New_York')
ny_time= user_time.astimezone(pytz.timezone(tz2))
print("In Europe/Chisinau is :", user_time)
print("In America/New_York is :", ny_time)

运行代码时抛出错误:

raise UnknownTimeZoneError(zone)
pytz.exceptions.UnknownTimeZoneError

问题分析

  1. 无时区的datetime对象导致逻辑错误:strptime解析出的user_time不带时区信息,直接调用astimezone()会默认使用系统本地时区,而非用户输入的时区,后续转换自然出错。
  2. 未处理时区输入异常:如果用户输入的时区标识符拼写错误或不在pytz的IANA时区列表中,会直接抛出UnknownTimeZoneError,没有容错处理。
  3. 冗余代码:tz2=('America/New_York')的括号无意义,属于冗余写法。

修复方案

  1. 先将解析出的无时区时间本地化到用户指定的时区,再转换到目标时区。
  2. 增加异常捕获,处理无效时区输入的情况。
  3. 优化冗余代码,明确时区转换逻辑。

修复后的代码:

import datetime
import pytz

try:
    user_inp_time = input("请输入时间(格式HH:MM):")
    user_inp_tz = input("请输入你的时区(如Europe/Chisinau):")
    
    # 解析时间(无时区)
    naive_time = datetime.datetime.strptime(user_inp_time, "%H:%M")
    # 获取用户指定时区并本地化时间
    user_tz = pytz.timezone(user_inp_tz)
    local_user_time = user_tz.localize(naive_time)
    
    # 转换为纽约时区
    ny_tz = pytz.timezone('America/New_York')
    ny_time = local_user_time.astimezone(ny_tz)
    
    print(f"你所在时区的时间:{local_user_time}")
    print(f"纽约时区的时间:{ny_time}")
except pytz.exceptions.UnknownTimeZoneError:
    print("错误:输入的时区无效,请使用IANA时区格式,例如Europe/Chisinau、Asia/Shanghai")
except ValueError:
    print("错误:时间格式不正确,请输入HH:MM格式的时间")

说明

  • 使用user_tz.localize(naive_time)将无时区的datetime对象绑定到用户指定时区,确保后续转换的基准正确。
  • 增加异常捕获,分别处理无效时区和错误时间格式的情况,提升代码健壮性。
  • 输出信息更清晰,符合中文用户使用习惯。

内容的提问来源于stack exchange,提问作者Andy Verlan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 17:45:29