如何用Python仅通过for循环、if语句与字符串实现4时区时间转换?
美式时区时间转换解决方案(仅用基础字符串、for/if)
核心思路
纯靠字符串拆分、条件判断和循环实现东部(EST)、中部(CST)、山地(MST)、太平洋(PST)4个时区的转换,步骤如下:
- 拆分输入的时间字符串,提取小时、分钟、时段(AM/PM)和原时区
- 将12小时制时间转为24小时制,简化偏移计算
- 定义各时区相对于东部时间(EST)的偏移量
- 遍历目标时区,计算偏移后的时间,再转回12小时制格式
完整代码
# 获取用户输入(格式示例:10:30 AM EST) user_input = input("输入时间及时区(如 10:30 AM EST):") # 拆分输入为时间、时段、原时区 input_parts = user_input.split() time_segment = input_parts[0] am_pm = input_parts[1] original_timezone = input_parts[2] # 从时间字符串中拆分小时和分钟(用字符串定位冒号) colon_pos = time_segment.find(':') hour_str = time_segment[:colon_pos] minute_str = time_segment[colon_pos+1:] hour = int(hour_str) minute = int(minute_str) # 转换为24小时制,方便计算 if am_pm == "AM": if hour == 12: hour_24 = 0 else: hour_24 = hour else: # PM时段 if hour == 12: hour_24 = 12 else: hour_24 = hour + 12 # 定义各时区相对于EST的偏移量(EST为基准,数值越小越晚) timezone_offsets = { "EST": 0, "CST": -1, "MST": -2, "PST": -3 } # 获取原时区的偏移值 original_offset = timezone_offsets[original_timezone] # 遍历所有目标时区,跳过原时区,计算转换结果 target_timezones = ["EST", "CST", "MST", "PST"] for tz in target_timezones: if tz == original_timezone: continue target_offset = timezone_offsets[tz] # 计算目标时区与原时区的偏移差 offset_difference = target_offset - original_offset new_hour_24 = hour_24 + offset_difference # 处理跨天情况(小于0加24,大于等于24减24) if new_hour_24 < 0: new_hour_24 += 24 elif new_hour_24 >= 24: new_hour_24 -= 24 # 将24小时制转回12小时制格式 if new_hour_24 == 0: display_hour = "12" display_period = "AM" elif 1 <= new_hour_24 < 12: display_hour = str(new_hour_24) display_period = "AM" elif new_hour_24 == 12: display_hour = "12" display_period = "PM" else: # 13-23点 display_hour = str(new_hour_24 - 12) display_period = "PM" # 确保分钟显示为两位(比如5分转为05) if len(minute_str) < 2: minute_str = "0" + minute_str # 格式化并输出结果 converted_time = f"{display_hour}:{minute_str} {display_period} {tz}" print(converted_time)
常见问题修正
- 小时转换错误:12AM要转为24小时制的0,而非12;12PM保持12不变,其他PM小时加12。
- 偏移方向搞反:比如从EST转PST,偏移差是-3(PST比EST晚3小时),小时需减3而非加3。
- 跨天未处理:比如EST的1AM转PST,结果是前一天的10PM,需通过加减24修正小时。
- 分钟格式问题:确保分钟始终是两位,比如输入"9:5 AM EST"要转为"9:05 AM EST"再处理。
内容的提问来源于stack exchange,提问作者romanbouchouiev
相关产品推荐
相关产品推荐

