如何从带时区的日期时间字符串中计算距离当前时间的剩余分钟数
实现方案
现有代码问题修正
你现有代码的时区提取逻辑是硬编码匹配Central,遇到Eastern/Pacific就会失效,先把字段提取逻辑优化,同时补充时区映射、带时区时间构造的逻辑即可实现需求。
需要提前安装pytz库处理时区,安装命令:pip install pytz
完整实现步骤
- 拆分日期、时间、时区三个字段:按
|拆分原始字符串后,后半段的时间部分从最后一个空格处拆分,前面是时间文本,后面是时区标识 - 映射美区时区到pytz可识别的时区名称:
Pacific对应US/Pacific、Central对应US/Central、Eastern对应US/Eastern - 把日期、时间文本合并解析为原始datetime对象,再绑定对应时区
- 获取当前对应时区的时间,二者求差值后换算为分钟数
可运行代码示例
from datetime import datetime import pytz # 时区映射表 TIMEZONE_MAP = { "Central": "US/Central", "Eastern": "US/Eastern", "Pacific": "US/Pacific" } date_time_string = "Tuesday, May 18, 2021 | 9:00 AM Central" # 拆分日期和时间+时区部分 day_part, time_part = date_time_string.split("|") day_part = day_part.strip() time_part = time_part.strip() # 拆分时间和时区 time_str, tz_tag = time_part.rsplit(" ", 1) tz = pytz.timezone(TIMEZONE_MAP[tz_tag]) # 合并日期时间解析,绑定时区 target_datetime = datetime.strptime(f"{day_part} {time_str}", "%A, %B %d, %Y %I:%M %p") target_datetime = tz.localize(target_datetime) # 获取当前同时区时间 now_datetime = datetime.now(tz=tz) # 计算剩余分钟,总秒数除以60取整 diff_seconds = (target_datetime - now_datetime).total_seconds() remain_minutes = int(diff_seconds / 60) print(f"目标时间:{target_datetime}") print(f"当前时间:{now_datetime}") print(f"剩余分钟数:{remain_minutes}")
结果说明
- 如果
remain_minutes为正数,代表目标时间还未到,数值就是剩余分钟数 - 如果
remain_minutes为负数,代表目标时间已经过去,绝对值是已经过去的分钟数
内容的提问来源于stack exchange,提问作者user14360522
相关产品推荐
相关产品推荐

