跨时区会议时间助手
跟海外同事、客户或家人约时间,最怕两件事:脑算时差算错(把别人半夜拉起来开会),以及找不到大家都清醒的时间。这个 skill 一条命令算清、一条命令找到最佳窗口,并且正确处理夏令时——夏天纽约是 UTC-4、冬天是 UTC-5,工具自动区分,不会差一小时。
解决的痛点
- 「北京下午 3 点,纽约、伦敦、洛杉矶各是几点?」——手算容易错,尤其跨日和夏令时。
- 「三地团队,什么时候开会大家都不用早起熬夜?」——脑子里排不出来。
- 每次都要重敲一长串城市名——可保存成"团队"一键复用。
目标用户
远程团队、外贸/跨境电商、和海外客户对接的人、留学生/移民与家人约视频、自由职业者对接全球客户——凡是要跨时区约时间的人。
核心能力
- 多地此刻时间(
now):一屏看清各地当前本地时间与 UTC 偏移,跨日自动标「次日/前一日」。 - 单点换算(
at):给定「某地某时刻」,换算到其他各地,并用 🟢🟡🔴 标出是否落在对方可接受时段。 - 最佳窗口搜索(
find,核心):给每个人一个可接受时段(如北京 9-19、纽约 8-20),自动扫描全天、找出所有人都在时段内的会议窗口,并按"舒适度"(越靠近各自白天中段越好)排序推荐。 - 夏令时正确:底层用系统 IANA 时区库,自动按日期判断 DST,不写死偏移。
- 团队复用(
team):把常用的人和时段存成团队,之后--team 名字直接用。 - 灵活地点输入:内置 100+ 城市中英文别名;也支持任意 IANA 名(
Asia/Tokyo)或裸偏移(UTC+8、+5:30)。
执行方式
脚本 tzmeet.py(零依赖,仅 Python 3.9+ 标准库 zoneinfo)存于技能目录:
SKILL=~/.workbuddy/skills/timezone-meeting-planner
PY=/Users/simon/.workbuddy/binaries/python/versions/3.13.12/bin/python3 # 或系统 python3
# 0) 查内置城市别名(可加关键词过滤)
$PY $SKILL/tzmeet.py cities 纽约
# 1) 各地此刻几点
$PY $SKILL/tzmeet.py now --people "北京,纽约,伦敦,东京"
# 2) 把「北京 7月29日 15:00」换算到各地
$PY $SKILL/tzmeet.py at 15:00 --from 北京 --people "纽约,伦敦,洛杉矶" --date 2026-07-29
# 3) 找一个三地都合适的 60 分钟会议窗口(核心)
$PY $SKILL/tzmeet.py find --people "北京:9-19,纽约:8-20,伦敦:9-18" --date 2026-07-29 --duration 60 --top 5
# 4) 保存常用团队后复用
$PY $SKILL/tzmeet.py team save 亚太美东 --people "北京:9-20,纽约:8-21,伦敦:9-18"
$PY $SKILL/tzmeet.py find --team 亚太美东 --date 2026-07-30 --duration 45
地点写法(--people)
以英文逗号分隔,每个参与地格式:城市[:时段][=显示名]
- 北京 —— 用默认时段 9:00-18:00
- 纽约:8-20 —— 可接受时段 8:00-20:00
- 伦敦:9:30-17:30 —— 支持半点
- Asia/Tokyo=东京总部 —— 用 IANA 名并自定义显示名
- UTC+8 / +5:30 —— 裸偏移(不含夏令时变化)
时段仅 find 与 at 使用;now 忽略时段。
命令与参数
| 命令 | 作用 | 主要参数 |
|---|---|---|
cities [关键词] |
查内置城市别名 | — |
now |
各地此刻时间 | --people / --team |
at <时刻> |
单点换算到各地 | --from(必填)--people/--team --date |
find |
找最佳会议窗口 | --people/--team --date --duration(分钟,默认60) --top(默认5) --core(舒适核心,默认10-16) |
team list/save/show/remove |
团队管理 | --people |
示例
输入:
tzmeet.py find --people "北京:9-18,东京:9-18,新加坡:9-18" --date 2026-07-29 --duration 60 --top 2
输出(节选):
✅ 找到 15 个可行窗口,按舒适度排序,展示前 2 个:
⭐ 最佳 方案 1(舒适度惩罚 0.0)
北京 07-29 09:30 → 10:30 Wed
东京 07-29 10:30 → 11:30 Wed
新加坡 07-29 09:30 → 10:30 Wed
找不到窗口时(如北京+纽约都限 9-18,客观无重叠)会明确提示并给出建议:放宽某地时段、缩短时长或分两批开会。
工作原理(简述,便于信任)
- 以第一个参与地的所选日期为"锚点日",按 30 分钟粒度扫描全天候选起点。
- 每个候选起点换算到各地本地时间,要求会议整段落在该地当天的可接受时段内(自动判断是否跨日)。
- 只保留"人人都满足"的窗口;按每人会议中点偏离舒适核心(默认 10:00-16:00)的总距离升序排序,越靠近白天中段越优先。
边界与说明
- 纯本地运行,团队数据存于本机
~/.tzmeet/teams.json(可用环境变量TZMEET_HOME改路径),不上传任何服务器。 - 夏令时按系统 IANA 时区库判断,请确保系统时区数据较新;裸偏移(
UTC+8)不含夏令时变化,需要 DST 请用城市名或 IANA 名。 - 工具只做时间计算与建议,不代订会议、不发日历邀请;最终请以各方确认为准。
- 半时区/特殊时区(印度 +5:30、尼泊尔 +5:45 等)用城市名即可正确处理。