זמןzman

השיטה

איך המונה מחושב, מה נבדק, ומה עוד נותר לעשות.

היחידה וראשית המניין

המונה היסודי הוא מספר שלם בן 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 (אטום) + DUT1 UT1 סיבוב כדור הארץ IERS finals2000A.all UT1−UTC באינטרפולציה + 35.2137° מז' זמן ירושלים הממוצע + 2 שע' 20 דק' 51.288 שנ' − ראשית, × 1,969,920 / 86,400 רגע (מספר שלם) רגעים מאז ראשית המניין חשבון טהור יום · שעה · חלק · רגע · תאריך · יום בשבוע מעל הקו הזה: שניית SI,‏ UTC,‏ MJD. חבילה אחת (pkg/clock + pkg/iers). ה־API לעולם אינו רואה אותן.
משעון המחשב אל המונה. השנייה קיימת רק בשתי התיבות הראשונות.

בפירוט:

  1. השרת קורא את שעון המחשב, ב־UTC, המסונכרן ב־NTP.
  2. הוא מחשב את התאריך היוליאני המתוקן של הרגע ומבצע אינטרפולציה ליניארית של UT1−UTC (DUT1) בין שתי השורות הסמוכות בקובץ finals2000A.all של ה־IERS. קפיצה של שנייה מעוברת בין שתי שורות אינה עוברת אינטרפולציה: נלקח הערך מן הצד הקרוב יותר.
  3. UT1 = UTC + DUT1. זהו הסיבוב הממשי של כדור הארץ, בדיוק המדידות (עשרות מיקרו־שניות בערכים הסופיים, כמה אלפיות שנייה בתחזיות לחודש קדימה).
  4. זמן ירושלים הממוצע הוא UT1 מוזז לפי קו האורך, 35.2137° מזרח, כלומר + 8,451.288 שניות. ללא אזור זמן, ללא שעון קיץ.
  5. הזמן שחלף מאז ראשית המניין מומר לרגעים בחשבון של מספרים שלמים: רגע = ⌊ננו־שניות × 1,969,920 / 86,400 × 10⁹⌋. החישוב משתמש במספרים שלמים בדיוק שרירותי; שום נקודה צפה אינה נכנסת לתוצאה.

מכאן ואילך הכול שלם: חלוקה ב־1,969,920 ליום, ב־82,080 לשעה, ב־76 לחלק.

התחזיות

ה־IERS מפרסם ערכים מדודים באיחור של ימים אחדים, ואחר כך שנה של תחזיות המסומנות P. כשהרגע הנוכחי עובר את המדידה האחרונה, השרת משתמש בתחזית ואומר זאת: השדה clock.predicted הופך ל־true ו־clock.dut1_age_days נותן את גיל המדידה האחרונה. מעבר לשורה האחרונה בקובץ נשמר הערך האחרון הידוע. הקובץ נטען מחדש מדי שבוע; אם אינו נגיש, מטמון הדיסק ואחריו המטמון המשותף משמשים כגיבוי. אם אין שום נתון זמין בהפעלה, השרת פועל במצב fallback עם DUT1 = 0 — שגיאה של פחות משנייה, כעשרים רגעים — ומודיע על כך בכל תשובה.

מה נבדק

מה עדיין לא נעשה

השרת אינו מודד את סיבוב כדור הארץ; הוא קורא אותו מן ה־IERS. החיישן המקומי המתוכנן — גנומון ומצלמה ביום, פתרון אסטרומטרי של השמיים בלילה — עדיין אינו קיים. הממשק Clock (Now() rega.Rega, Quality()) הוא נקודת ההחלפה; דבר ב־API אינו תלוי בו. השרת אינו עוסק בחגים, בזמני היום לפי מקום או בקריאות: לשם כך קיימים hebcal ו־KosherJava, והם מצוינים.

הקוד ציבורי: https://github.com/materligmann/zman.