关于 idf-date-converter
idf-date-converter 是处理希伯来历与公历日期的 Skill,面向需要节日日期、双历格式或以色列工作日计算的用户。它结合 pyluach 脚本和规则说明,特别区分日落前后的希伯来日期及不同节日对工作日的影响。
主要功能
- 01希伯来历与公历互转
- 02生成希伯来文数字和双历日期
- 03查询以色列节日与禁食日
- 04计算以色列工作日及休息日
- 05说明安息日点烛与结束时间查询
适用场景
- 01为以色列文件填写双历日期
- 02查询节日日期及开始时间
- 03计算含法定休息日的工作日数
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ skills-il/ developer-tools --skill idf-date-converter安装后在 Claude Code 中输入/idf-date-converter确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
evidence.jsonmetadata.jsonoptimization-log.jsonSKILL_HE.mdreferences/hebrew-calendar-reference.mdscripts/convert_date.py详细介绍
IDF 日期转换器
说明
步骤 1:识别请求
| 请求 | 操作 |
|---|---|
| 转换指定日期 | 公历转希伯来历,或希伯来历转公历 |
| X 节日是什么时候? | 查询希伯来历中的节日 |
| 文档格式 | 希伯来历 + 公历双日期字符串 |
| 工作日 | 计算天数,不包括安息日 + 节日 |
| 安息日时间 | 查询某城市的安息日点烛时间 / Havdalah 时间(参见步骤 7) |
步骤 2:日期转换
使用 Python 进行转换:
# Using pyluach library
from pyluach import dates, hebrewcal
# Gregorian to Hebrew
greg_date = dates.GregorianDate(2026, 2, 24)
heb_date = greg_date.to_heb()
print(f"{heb_date.day} {heb_date.month_name()} {heb_date.year}")
# Hebrew to Gregorian (always verify the resulting date by round-tripping)
heb_date = dates.HebrewDate(5786, 11, 15) # 15 Shvat 5786 (Tu B'Shvat). pyluach numbers months from Nisan=1, so Shvat=11
greg_date = heb_date.to_greg()
print(f"{greg_date.day}/{greg_date.month}/{greg_date.year}")
步骤 3:希伯来数字格式
希伯来日期使用 gematria(字母数字系统):
- 个位数:alef=1、bet=2、gimel=3,……tet=9
- 十位数:yod=10、kaf=20、lamed=30,……tzadi=90
- 百位数:kuf=100、resh=200、shin=300、tav=400
- 特例:15 = tet-vav(不是 yod-heh),16 = tet-zayin(不是 yod-vav)
- 年份:省略千位数(5786 写作 tav-shin-peh-vav = 786)
步骤 4:双日期格式
用于以色列文件:
24 February 2026 / 7 Adar 5786
(5786 是一个普通的希伯来年份,不是闰年,因此只有一个 Adar,没有 Adar I / Adar II。打印双日期字符串前,请务必运行 pyluach 确认。)
步骤 5:以色列工作日
以色列的工作周为周日至周四(许多行业周五只工作半天)。
人们称作“节日”的日子并非全部放假,这一区别会影响天数计算。请分为两个层级:
| 层级 | 日期 | 对工作日计数的影响 |
|---|---|---|
| 法定休息日 | Rosh Hashana(2 天)、Yom Kippur、Sukkot 第 1 天、Shmini Atzeret / Simchat Torah、Pesach 第 1 天、Pesach 第 7 天、Shavuot、Yom HaAtzmaut | 扣除。这些日子里,以色列的工作场所、银行和公共交通依法关闭 |
| 纪念日 | Purim、Shushan Purim、Yom HaZikaron、Yom HaShoah、Yom Yerushalayim、Yom HaAliyah、Rabin Memorial Day、Sigd、Chol HaMoed、Chanukah、Tu B'Shvat、Lag BaOmer、所有公共斋戒日 | 报告,但不要扣除。工作场所通常照常开放,不过工作时间往往会缩短 |
| 节日前夕 | Erev Rosh Hashana、Erev Yom Kippur、Erev Sukkot、Hoshana Rabba、Erev Pesach、Erev Pesach VII、Erev Shavuot | 报告为半天。银行、政府机关和法院会在中午前后关闭;Erev Pesach 中午后几乎全面停业。如果按小时计算,请扣除半天 |
安息日(周五日落至周六日落)始终排除在外。宣布举行选举时,选举日也予以排除。
脚本会报告 Yom Yerushalayim 和 Yom HaAliyah,但会有意省略 Rabin Memorial Day 和 Sigd,因为它无法模拟这两个节日的日期规则;请直接查询这两项。
请注意,在耶路撒冷和其他历史悠久的城墙城市,实际庆祝的 Purim 是 Shushan Purim(Adar 15 日),而不是 Adar 14 日:学校和许多工作场所会在这一天关闭。
scripts/convert_date.py business-days <start> <end> 严格按照上述分类进行计算,并将纪念日与扣除的休息日分别列出,方便你采用所在行业的惯例。
步骤 6:希伯来历的一天从日落开始
希伯来历日期并非从午夜到午夜。它从前一公历日的傍晚日落时(shkia)开始,到次日夜幕降临时(tzeit hakochavim)结束。这个领域的所有库(包括 pyluach)转换的都是白天日期:GregorianDate(2026, 2, 24).to_heb() 返回 5786 年 Adar 月 7 日。对于 2 月 24 日日出至当日日落这段时间,这是正确的;但对于日落后的时段,则不正确。
当答案涉及具体时刻,而不只是历法日期时,这一点很重要:
- 日落后,日期加一天。 用户在 2026 年 2 月 24 日 20:00 询问“今天的希伯来历日期是什么?”,想知道的是 Adar 月 8 日,而不是 Adar 月 7 日。回答前,请询问或推断当地时间,并说明采用了哪种约定。
- 逝世周年纪念日、成人礼日期和法律文件日期,均按事件实际发生时的希伯来历日期计算。若出生时间为 23:00,则属于希伯来历的次日。
- 节日从前一晚开始。 “Yom Kippur 是 2026 年 9 月 21 日”表示禁食从 9 月 20 日日落时开始。该技能的表格提供的是节日白天所在的公历日期,这是标准约定,并非节日开始的傍晚日期。
- 不要自行计算日落时间。 日落时间因地点而异,需要使用太阳位置库或 API。请使用 hebcal 的 zmanim 端点和 geonameid,或说明答案以白天为准。
随附脚本刻意不会猜测:它报告白天对应的希伯来历日期。若问题涉及具体时段,请自行调整晚间日期。
步骤 7:安息日和节日时间
安息日烛光点燃时间和 havdalah 时间取决于太阳位置,而非历法,因此无法通过日期转换得出。不要计算或估算这些时间。请使用城市的 geonameid 查询 Hebcal 的 Shabbat 端点:
https://www.hebcal.com/shabbat?cfg=json&geonameid=281184&M=on
常见的以色列 geonameid:Jerusalem 281184、Tel Aviv 293397、Haifa 294801、Beersheba 295530。
这个领域的大多数错误都源于以下两种约定:
- 烛光点燃时间的提前量并不统一。 Hebcal 默认在日落前 18 分钟,但 Jerusalem 为 40 分钟,Haifa 和 Zikhron Ya'akov 为 30 分钟,这符合当地习俗。只有当用户指出不同习俗时,才使用
b=<minutes>覆盖。切勿假设全国都采用提前 18 分钟的标准。 - Havdalah 有多种约定(
M=on表示按太阳高度角计算夜幕降临时间;另一种方式是通过m=<minutes>设置日落后的固定分钟数)。请说明你采用了哪种方式。
同一个端点也会返回 Rosh Hashana、Yom Kippur、Sukkot、Shmini Atzeret、Simchat Torah、Pesach 和 Shavuot 的节日前夕烛光点燃时间。
以公历日期表示的 2026 年以色列节日与禁食日
所有日期均为公历 2026 年。希伯来月份跨越两个希伯来年(提市黎月延续到下一个希伯来年)时,该行列出节日实际所在的希伯来年。
| 节日 / 禁食日 | 希伯来日期 | 公历 2026 年(约) | 希伯来年 |
|---|---|---|---|
| Tu B'Shvat | 15 Shvat | Feb 2 | 5786 |
| Fast of Esther (Ta'anit Esther) | 13 Adar | Mar 2 | 5786 |
| Purim | 14 Adar | Mar 3 | 5786 |
| Shushan Purim | 15 Adar | Mar 4 | 5786 |
| Pesach | 15-21 Nisan | Apr 2-8 | 5786 |
| Yom HaShoah | 27 Nisan | Apr 14 | 5786 |
| Yom HaZikaron | 4 Iyar | Apr 21 | 5786 |
| Yom HaAtzmaut | 5 Iyar | Apr 22 | 5786 |
| Lag BaOmer | 18 Iyar | May 5 | 5786 |
| Shavuot | 6 Sivan | May 22 | 5786 |
| Fast of 17 Tammuz (Shiv'a Asar B'Tammuz) | 17 Tammuz | Jul 2 | 5786 |
| Tisha B'Av (9 Av) | 9 Av | Jul 23 | 5786 |
| Rosh Hashana | 1-2 Tishrei | Sep 12-13 | 5787 |
| Fast of Gedaliah (Tzom Gedaliah) | 3 Tishrei | Sep 14 | 5787 |
| Yom Kippur | 10 Tishrei | Sep 21 | 5787 |
| Sukkot | 15-21 Tishrei | Sep 26 - Oct 2 | 5787 |
| Simchat Torah | 22 Tishrei | Oct 3 | 5787 |
| Chanukah (5787) | 25 Kislev - 2 Tevet | Dec 5-12, 2026 | 5787 |
| Fast of 10 Tevet (Asarah B'Tevet) | 10 Tevet | Dec 20 | 5787 |
关于 Chanukah 的说明:5787 年的 Chanukah 从 2026 年 12 月 4 日日落后开始(点燃第一支蜡烛),第一个完整的公历日是 2026 年 12 月 5 日(25 Kislev)。节日于 2026 年 12 月 12 日结束(2 Tevet)。表格列出的是 5787 年的 Chanukah,因为这一次落在公历 2026 年。
投入生产使用前,请务必使用 pyluach 核验这些日期。上方修正后的日期是在 v2.0.0 中重新生成的;最初发布的 2026 年日期预测表约有一半条目存在相差一天的错误。
Yom HaZikaron / Yom HaAtzmaut 日期顺延规则
以色列议会立法规定了 Yom HaZikaron 和 Yom HaAtzmaut 的日期顺延规则,以避免亵渎安息日。打印日期前请应用这些规则:
- 如果 5 Iyar 落在星期五或星期六,Yom HaAtzmaut 提前至星期四(4 Iyar 或 3 Iyar)。Yom HaZikaron 随之调整。
- 如果 5 Iyar 落在星期一,Yom HaAtzmaut 延后至星期二(6 Iyar),以免 Yom HaZikaron 在星期六晚间举行、与安息日相邻的仪式开始。
- 5 Iyar 只可能落在星期一、星期三、星期五或星期六。如果落在星期三,则不适用顺延规则。
- Yom HaShoah(27 Nisan)也会相应顺延:如果落在星期五,则提前至星期四(26 Nisan);如果落在星期日,则延后至星期一(28 Nisan)。
这些规则有生效年份;将其用于历史年份会造成不易察觉的错误。 Yom HaAtzmaut 于 1949 年依法成为国定节日;星期五 / 星期六顺延规则于 1951 年确立;星期一延期规则则仅自 2004 年起生效。Yom HaZikaron 始于 1951 年(1963 年立法确立),而 Yom HaShoah 定于 27 Nisan 则源自 1951 年以色列议会决议。使用现行规则将 1950 年代至 1990 年代的日期转换时,每个 2004 年之前的星期一年份都会使 Yom HaAtzmaut 偏移一天;而对于这些节日尚未设立的年份,转换结果还会包含全部三个节日。scripts/convert_date.py 会根据每条规则各自的生效年份进行判断。
2026 年,5 Iyar 落在星期三(4 月 22 日),因此不适用顺延规则。2026 至 2035 年这 10 年中有 6 年需要顺延(2028、2029、2031、2032、2034、2035),因此不应用这些规则构建的查找表,错的时候比对的时候更多。scripts/convert_date.py 会应用这些规则。
快速顺延禁食日(nidcheh)
公共禁食日从不安排在安息日,而四个会移动日期的禁食日并非都朝同一方向移动:
- 杰达利亚禁食日(提斯利月 3 日)、塔穆兹月 17 日和提莎贝阿夫节(阿夫月 9 日)若逢安息日,均顺延至下一个星期日。
- **以斯帖禁食日(亚达月 13 日)**则提前至前一个星期四(亚达月 11 日),因为它必须在普珥节之前。
- **特别忏悔日(提别月 10 日)**可能落在星期五,但从不落在安息日,因此从不移动。
在闰年,以斯帖禁食日、普珥节和书珊普珥节落在亚达二月(pyluach 月份 13),而非亚达一月(月份 12)。在闰年为普珥节传入月份 12,会得到早整整一个月的日期。
示例
示例 1:简单转换
用户说:“今天的希伯来日期是什么?” 结果:“2026 年 2 月 24 日 = 5786 年亚达月 7 日”(5786 年是平年,因此只有一个亚达月,没有亚达一月/亚达二月)
示例 2:节日查询
用户说:“2026 年逾越节是什么时候?” 结果:“逾越节于 2026 年 4 月 1 日日落后开始(5786 年尼散月 15 日)。第一场逾越节晚餐:4 月 2 日。以色列的最后一天:4 月 8 日。”
示例 3:工作日
用户说:“2026 年 3 月 1 日至 3 月 31 日之间有多少个工作日?” 结果:统计时排除安息日,并注明区间内是否有节日(普珥节为 3 月 3 日,书珊普珥节为 3 月 4 日)。
随附资源
脚本
scripts/convert_date.py,在希伯来历与公历之间转换日期,为以色列文档格式化双历日期,列出任意年份的以色列节日,并统计日期区间内的以色列工作日(排除安息日和节日)。需要pyluach库。运行:python scripts/convert_date.py --help
参考资料
references/hebrew-calendar-reference.md,完整的希伯来历参考资料,涵盖月份名称及其天数变化、19 年默冬周期闰年规则、含特殊情况的希伯来数字转换表、以色列节日日历(区分停工日和部分停业日),以及推荐的 Python 库(pyluach、hebcal)。处理闰年边缘情况、格式化希伯来数字或确定哪些节日会影响工作日计算时,请查阅此资料。
注意事项
- 希伯来历月份天数不固定(29 天或 30 天),闰年还会增加一个整月(亚达二月)。Agent 可能会误以为月份天数固定,或套用公历闰年规则。
- 以色列官方文件使用希伯来日期(例如“כ"ה באדר תשפ"ו”),而商业文件使用公历 DD/MM/YYYY。Agent 可能不清楚不同情境下应采用哪种格式。
- 犹太节日对应的公历日期每年都会变化。使用静态训练数据的 Agent 可能会给出当前年份的犹太新年、逾越节等节日的错误日期。
- 希伯来年从提斯利月(9 月/10 月)开始,而非 1 月。转换公历新年附近的日期时,Agent 可能会算错希伯来年的边界。
- 纪念日、独立日和大屠杀纪念日受法律规定的星期调整规则约束,以避免与安息日冲突。若静态查询表不检查星期几,直接将日期固定写为“艾亚尔月 5 日”,约有一半情况下会给出错误日期。务必应用上述调整规则。
- 光明节通常跨越两个公历年(12 月下旬至 1 月上旬)。标注公历年份列时,应选取实际有基斯流月 25 日落在该公历年内的希伯来年份。在同一行中混用 5786 年和 5787 年的日期是常见错误。
参考链接
| 来源 | URL | 检查内容 |
|---|---|---|
| Hebcal 犹太历 | https://www.hebcal.com | 权威节日日期;如需遵循以色列的节日安排,请设置为以色列日程 |
| Hebcal 开发者 API | https://www.hebcal.com/home/developer-apis | 用于节日表、日期转换和 zmanim(日落)的 REST 端点 |
| pyluach | https://github.com/simlist/pyluach | Python 参考实现;月份编号和闰年处理 |
| Yom HaAtzmaut 日期调整 | https://en.wikipedia.org/wiki/Yom_Ha%27atzmaut | 1951 年和 2004 年的日期调整决定 |
| 希伯来数字 | https://en.wikipedia.org/wiki/Hebrew_numerals | Gematria 表以及 15 / 16 的例外 |
故障排除
错误:“希伯来日期不正确”
原因:希伯来月份的长度不一;闰年月份容易混淆 解决方案:使用 hebcal.com 核对。Adar I/II 仅在闰年存在。当前年份(5786)的闰年状态会影响日期。
错误:普珥节前后转换后的日期恰好相差一个月
原因:闰年时,pyluach 将 Adar I 编为第 12 月,将 Adar II 编为第 13 月,而调用方往往会直觉地在第 12 月查找“Adar”。普珥节在 Adar II。
解决方案:选取月份编号前,先根据是否为闰年进行分支:13 if year % 19 in {0,3,6,8,11,14,17} else 12。convert_date.py to-gregorian 会将闰年的第 12 月标记为“Adar I”,因此错误会直接显示在输出中,而不是悄无声息地发生。
错误:转换后的日期恰好相差一天
原因:几乎总是希伯来历的日界问题(见步骤 6)。库返回的是白天的日期,而问题询问的是晚上的日期,或反之。如果偏差恰好为一天且在不同日期都能复现,则已确认这不是闰年或月份长度导致的问题。 解决方案:确定事件发生的当地时间。日落之后,将库返回的日期加一天。