如何转换时间格式、自动生成结束时间并批量生成日历添加链接?
时间转换与批量生成日历事件链接方案
核心问题解决:12小时制时间转UTC日历格式
你需要把「MM/DD/YYYY HH:MM AM/PM」格式的本地时间,转换为Google Calendar要求的「YYYYMMDDTHHMMSSZ」UTC格式,步骤和代码实现如下:
转换逻辑
- 解析输入时间:拆分出月、日、年、12小时制的时、分、上下午标识
- 12小时转24小时制:
- 若为PM:小时数为
小时+12(12PM保持12不变) - 若为AM:小时数为
小时(12AM转为00)
- 若为PM:小时数为
- 本地时间转UTC:根据输入时间的时区,转换为UTC时间(比如示例中输入为印度标准时间IST,比UTC早5.5小时,04:00 PM IST转UTC后就是10:30 AM,对应
20220806T103000Z) - 格式化输出:按
YYYYMMDDTHHMMSSZ拼接字符串
Python代码实现(单条转换)
from datetime import datetime import pytz def convert_to_calendar_time(input_time_str, timezone_str="Asia/Kolkata"): # 解析12小时制输入时间 local_time = datetime.strptime(input_time_str, "%m/%d/%Y %I:%M %p") # 绑定输入时间的时区 tz = pytz.timezone(timezone_str) local_time = tz.localize(local_time) # 转换为UTC时间并格式化 utc_time = local_time.astimezone(pytz.utc) return utc_time.strftime("%Y%m%dT%H%M%SZ") # 示例转换 start_input = "06/08/2022 04:00 PM" end_input = "06/08/2022 04:45 PM" print(convert_to_calendar_time(start_input)) # 输出:20220806T103000Z print(convert_to_calendar_time(end_input)) # 输出:20220806T111500Z
自动生成结束时间
如果不需要手动输入结束时间,可在开始时间基础上添加默认时长(比如45分钟):
from datetime import timedelta def get_end_time(start_input, duration_minutes=45, timezone_str="Asia/Kolkata"): tz = pytz.timezone(timezone_str) local_start = tz.localize(datetime.strptime(start_input, "%m/%d/%Y %I:%M %p")) local_end = local_start + timedelta(minutes=duration_minutes) utc_end = local_end.astimezone(pytz.utc) return utc_end.strftime("%Y%m%dT%H%M%SZ") # 示例:自动生成结束时间 end_time = get_end_time(start_input) print(end_time) # 输出:20220806T111500Z
批量生成日历链接
准备好批量输入的时间列表(可从CSV或文本文件读取),循环生成每个事件的Google Calendar链接:
def generate_calendar_link(start_time_str, event_title, duration_minutes=45, timezone_str="Asia/Kolkata"): start_cal = convert_to_calendar_time(start_time_str, timezone_str) end_cal = get_end_time(start_time_str, duration_minutes, timezone_str) # 构造Google Calendar模板链接 base_url = "https://www.google.com/calendar/render?action=TEMPLATE" title_param = f"&text={event_title.replace(' ', '%20')}" dates_param = f"&dates={start_cal}/{end_cal}" return f"{base_url}{title_param}{dates_param}&details=&location=" # 批量生成示例 batch_inputs = [ {"time": "06/08/2022 04:00 PM", "title": "Interview with Mark Zuckerberg"}, {"time": "06/09/2022 10:30 AM", "title": "Team Sync Meeting"}, {"time": "06/10/2022 02:15 PM", "title": "Client Demo"} ] for item in batch_inputs: link = generate_calendar_link(item["time"], item["title"]) print(f"{item['title']} 链接:{link}")
注意事项
- 务必明确输入时间的时区,否则UTC转换会出错,可根据实际需求修改
timezone_str参数(比如美国东部时区用America/New_York) - 如果不需要UTC转换(事件仅针对本地时区),可去掉时区转换步骤,直接格式化本地时间,但Google Calendar默认会按用户时区解析,建议统一用UTC避免混乱
内容的提问来源于stack exchange,提问作者runningmark
相关产品推荐
相关产品推荐

