מהו זמן Unix?
זמן Unix (המוכר גם כזמן Epoch, זמן POSIX, או חותמת זמן Unix) הוא מערכת לתיאור נקודת זמן. זהו מספר השניות שחלפו מאז Epoch Unix, המוגדר כ-00:00:00 UTC ביום חמישי, 1 בינואר 1970. הוא משמש באופן נרחב במערכות הפעלה דמויות Unix ובמערכות מחשוב רבות אחרות.
היתרון המרכזי של זמן Unix הוא הפשטות שלו. הוא מייצג זמן כמספר שלם אחד, שמובן בכל העולם ומתמיד גדל. זה מקל מאוד על אחסון, השוואה וביצוע חישובים עם תאריכים ושעות מבלי לדאוג לאזורי זמן, לשעון קיץ או למערכות לוח שנה שונות. לדוגמה, כדי למצוא את ההבדל בין שני אירועים, פשוט מחסרים את חותמות הזמן שלהם.
בעוד שמספר זה הוא מושלם למחשבים, הוא לא מאוד ידידותי לבני אדם. כדי לגשר על הפער הזה, מפתחים וחובבי טכנולוגיה משתמשים בכלי שנקרא המרת Epoch. ניתן להשתמש בו כדי להמיר מיידית כל חותמת זמן לתאריך קריא לאדם, או להפך על ידי מציאת חותמת הזמן לתאריך מסוים.
בעיית שנת 2038
בעיה ידועה הקשורה לזמן Unix היא "בעיית שנת 2038". היא דומה בעניין לבעיית Y2K. מערכות מחשב מוקדמות רבות תוכננו לאחסן את חותמת הזמן של Unix כמספר שלם ב-32 סיביות עם סימן. מספר שלם ב-32 סיביות עם סימן יכול לייצג ערכים מ- -2,147,483,648 עד 2,147,483,647.
הערך המקסימלי, 2,147,483,647, יגיע ב-03:14:07 UTC ב-19 בינואר 2038. בשנייה הבאה, המספר יעלה על הגבול ויתקפל חזרה לערך השלילי המקסימלי שלו, שיתפרש על ידי מערכות כתאריך בשנת 1901. זה עלול לגרום לכשלונות נרחבים בתוכנות ישנות שתלויות בייצוגי זמן ב-32 סיביות.
הפתרון הוא להשתמש ב-מספר שלם ב-64 סיביות לאחסון חותמת הזמן. מספר שלם ב-64 סיביות הוא כה גדול עד שלא יעלה על הגבול במשך כ-292 מיליארד שנים, מה שמספק פתרון לבעיה לעתיד הנראה לעין. רוב מערכות ההפעלה והתוכנות המודרניות כבר עברו לייצוגי זמן ב-64 סיביות.
שניות קפיצה וזמן Unix
פרט טכני חשוב הוא שזמן Unix אינו מתחשב בשניות קפיצה. בעוד ש-UTC (זמן אוניברסלי מתואם) מוסיף לעיתים שנייה קפיצה כדי לשמור על סינכרון עם סיבוב כדור הארץ, חותמת הזמן של Unix פשוט מתעלמת מהן וממשיכה לספור בקו ישר.
זה אומר שזמן Unix אינו ייצוג מדויק של UTC. במקום זאת, הוא מתואר כמדידה ליניארית של שניות. כאשר מתרחשת שנייה קפיצה, לעיתים זמן Unix חוזר על עצמו בשנייה כדי לשמור על סינכרון. הבדל זה קריטי ליישומים מדעיים ודיוק גבוה, אך לרוב השימושים הכלליים, ההבדל זניח.
שימושים נפוצים של זמן Unix
- חותמות זמן של קבצים: מערכות הפעלה משתמשות בחותמות זמן של Unix כדי לעקוב אחר מתי קבצים נוצרו, שונו או נפתחו לאחרונה.
-
מסדי נתונים:
זהו אופן נפוץ ויעיל לאחסון מידע תאריך ושעה לרישומים (למשל,
created_at,updated_at). - API ופיתוח אתרים: משמש לאישור תוקף של סשנים, שליטה במטמון ולוגים של בקשות API.
- תכנות: כמעט כל שפת תכנות מספקת פונקציות לקבלת חותמת הזמן של Unix הנוכחית והמרתה לתאריכים קריאים לאדם ולהפך.