מקורות זמן Unix
כדי להבין באמת את חותמת ה-epoch, שנקראת גם זמן Unix, זמן POSIX, או פשוט ה-epoch, צריך לחזור אל ראשית מערכת ההפעלה Unix בתחילת שנות ה-70. זמן Unix הוא שיטה למעקב אחר הזמן כסכום רץ של שניות. באופן מדויק, הוא מייצג את מספר השניות שחלפו מאז ה-epoch של Unix. ה-epoch עצמו מוגדר כ-00:00:00 לפי זמן אוניברסלי מתואם (UTC) ביום חמישי, 1 בינואר 1970.
כשקן תומפסון ודניס ריצ'י פיתחו את הגרסאות הראשונות של Unix במעבדות בל, הם נזקקו לדרך פשוטה ויעילה שבה מחשבים ייצגו ויאחסנו תאריכים ושעות. תאריכים קריאים לבני אדם (כמו '29 ביולי 2026') מורכבים מאוד לעיבוד ממוחשב. הם כוללים חודשים לא סדירים (חלקם בני 28, 29, 30 או 31 ימים), שנים מעוברות, אזורי זמן, ומעברים לשעון קיץ. על ידי ייצוג הזמן כמספר שלם אחד שעולה ברציפות, יוצרי Unix יצרו תקן זמן אוניברסלי וחד-משמעי שאפשר לאחסן, להשוות ולתפעל מתמטית בקלות.
למה מפתחים משתמשים בחותמות Epoch כיום
גם עשרות שנים אחר כך, זמן epoch נשאר עמוד השדרה של תשתית המחשוב המודרנית. אלה הסיבות לאימוץ האוניברסלי:
- פשטות ויעילות: אחסון מספר שלם של 32 סיביות או 64 סיביות תופס הרבה פחות מקום בדיסק ובזיכרון מאשר מחרוזת תאריך מעוצבת. כשמסדי נתונים מכילים מיליארדי רשומות, חיסכון של כמה בתים בכל שורה מתורגם להפחתה עצומה בעלויות האחסון ולביצועי אינדקס טובים יותר.
- אדישות לאזור זמן: חותמת epoch קשורה מטבעה ל-UTC. לא משנה היכן המשתמש נמצא פיזית. כששרת בטוקיו מתקשר עם לקוח בניו יורק, העברת מספר epoch מונעת כל בלבול לגבי אזורי זמן. הלקוח פשוט ממיר את המספר לאזור הזמן המקומי שלו ברגע שהוא מתקבל.
- פעולות מתמטיות פשוטות: חישוב משך הזמן בין שני אירועים פשוט כמו חיסור חותמת אחת מהשנייה. אם רוצים לדעת כמה שניות חלפו בין שתי רשומות לוג,
timestamp2 - timestamp1נותן את התשובה המדויקת מיד, בלי לוגיקת פענוח תאריכים מורכבת. - מיון במסד נתונים: מיון רשומות לפי סדר כרונולוגי בעמודת מספר שלם מהיר בהרבה למנועי מסדי נתונים מאשר פענוח ומיון של מחרוזות חותמת מבוססות טקסט.
ההשפעה של שניות מעוברות
ניואנס טכני של זמן Unix הוא האופן שבו הוא מטפל בשניות מעוברות. שנייה מעוברת היא תיקון של שנייה אחת שמוחל מדי פעם על הזמן האוניברסלי המתואם (UTC) כדי לשמור את שעת היום קרובה לזמן השמש הממוצע. מעניין שזמן Unix אינו מביא בחשבון שניות מעוברות. במערכת זמן Unix, כל יום נחשב בדיוק ל-86,400 שניות. כשמתרחשת שנייה מעוברת, שעון Unix בעצם חוזר על אותה שנייה פעמיים. בחירת התכנון המכוונת הזו מונעת מחותמות זמן להפוך לבלתי צפויות, אם כי פירוש הדבר הוא שזמן Unix אינו מדד לינארי קפדני של הזמן הפיזי שחלף מאז 1970. עבור הרוב המכריע של יישומי הנדסת תוכנה, הפער הקטן הזה מקובל לחלוטין ועדיף על המורכבות של מעקב אחרי כל שנייה מעוברת היסטורית.