השיטה
איך המונה מחושב, מה נבדק, ומה עוד נותר לעשות.
היחידה וראשית המניין
המונה היסודי הוא מספר שלם בן 64 סיביות עם סימן: מניין הרגעים שחלפו מאז ראשית המניין. הקבועים המבניים נקבעים על פי הגדרה ואינם תלויים בשום מדידה:
| יחידה | ערך | מקור |
|---|---|---|
| שעה אחת | 1,080 חלקים | רמב"ם, הלכות קידוש החודש ו, ב |
| חלק אחד | 76 רגעים | שם, י, א |
| יום אחד | 24 שעות = 25,920 חלקים = 1,969,920 רגעים | על פי הגדרה |
| תחילת היום | 18:00 | זמן ירושלים הממוצע, מוסכמת הלוח הקבוע |
ראשית המניין (רגע 0) היא מוצאי שבת בשעה 18:00 הפותחת את שבוע מולד תוהו. יום 0 הוא יום ראשון זה; יום 1 הוא יום שני, שהוא גם א' בתשרי שנת א. מולד תוהו, בהר"ד, חל ביום ב בשבוע, 5 שעות, 204 חלקים, כלומר:
1 × 25,920 + 5 × 1,080 + 204 = 31,524 חלקים
31,524 × 76 = 2,395,824 רגעים
נקודה זו נבדקת בבדיקת יחידה, וכן הזהות "יום 1 = א' בתשרי א = יום שני". מספר היום d קשור ל־fixed date של ריינגולד ודרשוביץ על ידי RD = d − 1,373,428; הקשר הזה מכייל את הגשר לשעון המחשב, והוא מאומת בבדיקות צולבות על רגעים ידועים.
הלוח הקבוע
הלוח ממומש ללא ספרייה חיצונית, מתוך הכללים הקלאסיים. מולד תשרי של שנה N הוא מולד תוהו ועוד ⌊(235 N − 234) / 19⌋ חודשים לבניים ממוצעים של 29 יום, 12 שעות, 793 חלקים. א' בתשרי נובע לאחר החלת ארבע הדחיות, בסדר הזה:
| דחייה | תנאי | תוצאה |
|---|---|---|
| מולד זקן | מולד בשעה 18 או מאוחר יותר | נדחה למחרת |
| גטר"ד | שנה פשוטה, מולד ביום שלישי בשעה 9 ו־204 חלקים או מאוחר יותר | נדחה (ליום חמישי, דרך הכלל הבא) |
| בט"ו תקפ"ט | שנה שלאחר מעוברת, מולד ביום שני בשעה 15 ו־589 חלקים או מאוחר יותר | נדחה ליום שלישי |
| לא אד"ו ראש | תוצאה ביום ראשון, רביעי או שישי | נדחה למחרת |
אורך השנה הוא ההפרש בין שני ראשי שנה עוקבים; חשון וכסלו סופגים את השינוי (353, 354, 355 יום; 383, 384, 385 בשנים מעוברות, השנים 3, 6, 8, 11, 14, 17 ו־19 במחזור). החודשים ממוספרים לפי המוסכמה המקראית: ניסן = 1 … אדר = 12, אדר ב׳ = 13.
שרשרת המדידה
בפירוט:
- השרת קורא את שעון המחשב, ב־UTC, המסונכרן ב־NTP.
- הוא מחשב את התאריך היוליאני המתוקן של הרגע ומבצע אינטרפולציה ליניארית של UT1−UTC (DUT1) בין שתי השורות הסמוכות בקובץ
finals2000A.allשל ה־IERS. קפיצה של שנייה מעוברת בין שתי שורות אינה עוברת אינטרפולציה: נלקח הערך מן הצד הקרוב יותר. - UT1 = UTC + DUT1. זהו הסיבוב הממשי של כדור הארץ, בדיוק המדידות (עשרות מיקרו־שניות בערכים הסופיים, כמה אלפיות שנייה בתחזיות לחודש קדימה).
- זמן ירושלים הממוצע הוא UT1 מוזז לפי קו האורך, 35.2137° מזרח, כלומר + 8,451.288 שניות. ללא אזור זמן, ללא שעון קיץ.
- הזמן שחלף מאז ראשית המניין מומר לרגעים בחשבון של מספרים שלמים: רגע = ⌊ננו־שניות × 1,969,920 / 86,400 × 10⁹⌋. החישוב משתמש במספרים שלמים בדיוק שרירותי; שום נקודה צפה אינה נכנסת לתוצאה.
מכאן ואילך הכול שלם: חלוקה ב־1,969,920 ליום, ב־82,080 לשעה, ב־76 לחלק.
התחזיות
ה־IERS מפרסם ערכים מדודים באיחור של ימים אחדים, ואחר כך שנה של תחזיות המסומנות P. כשהרגע הנוכחי עובר את המדידה האחרונה, השרת משתמש בתחזית ואומר זאת: השדה clock.predicted הופך ל־true ו־clock.dut1_age_days נותן את גיל המדידה האחרונה. מעבר לשורה האחרונה בקובץ נשמר הערך האחרון הידוע. הקובץ נטען מחדש מדי שבוע; אם אינו נגיש, מטמון הדיסק ואחריו המטמון המשותף משמשים כגיבוי. אם אין שום נתון זמין בהפעלה, השרת פועל במצב fallback עם DUT1 = 0 — שגיאה של פחות משנייה, כעשרים רגעים — ומודיע על כך בכל תשובה.
מה נבדק
- מולד תוהו = יום ב, 5 שעות, 204 חלקים = 31,524 חלקים = 2,395,824 רגעים; מולד תשרי תשפ"ו = יום שני, 18 שעות, 187 חלקים (כלומר "12:10 ו־7 חלקים" במוסכמת ההכרזות).
- הלוך ושוב תאריך ↔ יום על פני מאתיים שנה של ימים עוקבים, עם רציפות החודשים.
- אורך כל שנה מ־1 עד 10,000 בתוך {353, 354, 355, 383, 384, 385}, בעקביות עם סכום החודשים ועם היות השנה מעוברת.
- ראש השנה לעולם לא ביום ראשון, רביעי או שישי, על פני עשרת אלפים שנה.
- תאריכי ייחוס שנבדקו מול hebcal: א' בתשרי תשפ"ב עד תשפ"ז, פסח תשפ"ד עד תשפ"ו, יום הכיפורים תשפ"ו, אורכי השנים תשפ"ב עד תשפ"ז.
- גשר השעון: גבול 18:00 זמן ירושלים הממוצע במדויק, רגעים ידועים הנוחתים על התאריכים הנכונים, שעה = 82,080 רגעים, מונוטוניות.
- ניתוח קובץ IERS על קטע אמיתי מן הקובץ, אינטרפולציה, שנייה מעוברת, מטמון דיסק ומטמון משותף עם תקלת רשת מדומה.
- API: כל נקודת קצה, JSON וטקסט, הפניות, הגבלת קצב, ובדיקה העוברת על כל התשובות ואוסרת את המילים
unix,utc,iso,gregorian,seconds.
מה עדיין לא נעשה
השרת אינו מודד את סיבוב כדור הארץ; הוא קורא אותו מן ה־IERS. החיישן המקומי המתוכנן — גנומון ומצלמה ביום, פתרון אסטרומטרי של השמיים בלילה — עדיין אינו קיים. הממשק Clock (Now() rega.Rega, Quality()) הוא נקודת ההחלפה; דבר ב־API אינו תלוי בו. השרת אינו עוסק בחגים, בזמני היום לפי מקום או בקריאות: לשם כך קיימים hebcal ו־KosherJava, והם מצוינים.
הקוד ציבורי: https://github.com/materligmann/zman.