ממיר חותמות זמן של יוניקס: תמיכה בפורמטים של 12/24 שעות
ממיר חותמות זמן של יוניקס הופך חותמת זמן לתאריך ושעה קריאים. הכלי מזהה אוטומטית דיוק בשניות, במילישניות ובמיקרושניות, ומציג תוצאה בפורמט 12 או 24 שעות לבחירה.
ממיר חותמת זמן של Unix
חותמת זמן של יוניקס היא מספר השניות שחלפו מאז 1 בינואר 1970 (UTC)
תאריך ושעה מומרות
מהי חותמת זמן של יוניקס?
חותמת זמן של יוניקס היא מספר השניות שחלפו מאז 1 בינואר 1970 (חצות UTC/GMT), מבלי לספור שניות מעוברות. היא בשימוש נרחב במערכות יוניקס ובשפות תכנות לחישובי תאריך ושעה.
תיעוד
ממיר חותמת זמן של Unix לתאריך
חותמת זמן של Unix היא מספר המייצג נקודת זמן מסוימת. היא סופרת את מספר השניות השלמות שחלפו מאז חצות UTC בתאריך 1 בינואר 1970, רגע המכונה תקופת Unix. כלי זה ממיר חותמת זמן של Unix לתאריך ולשעה בלוח השנה, המוצגים בפורמט של 24 שעות או 12 שעות.
כיצד ממירים חותמת זמן של Unix לתאריך
הנוסחה הבסיסית פשוטה:
תאריך = תקופת Unix (1970-01-01, 00:00:00 UTC) + חותמת זמן (בשניות)
כדי להפוך מספר גולמי של שניות לתאריך, מוסיפים את מספר השניות הזה ל־1 בינואר 1970. לאחר מכן יש לפצל את התוצאה לשנה, חודש, יום, שעה, דקה ושנייה. זהו החלק המורכב, משום שיש להביא בחשבון שנים מעוברות, המוסיפות יום לפברואר, ואת העובדה שלחודשים יש אורכים שונים. ברוב שפות התכנות קיימת פונקציה מובנית לטיפול בתאריכים שעושה זאת באופן אוטומטי, כך שאין צורך לחשב זאת שלב אחר שלב.
דוגמה פתורה
נבחן את חותמת הזמן 1609459200.
- מחלקים במספר השניות ביום: 1,609,459,200 ÷ 86,400 = 18,628 ימים.
- סופרים 18,628 ימים קדימה מ־1 בינואר 1970, תוך התחשבות בשנים המעוברות לאורך הדרך.
- הספירה מגיעה ל־1 בינואר 2021.
לכן 1609459200 מומר ל־יום שישי, 1 בינואר 2021, 00:00:00 UTC. היום בשבוע, יום שישי, נגזר מאותה ספירת ימים.
הממיר מציג את התוצאה באזור הזמן שעליו מדווח הדפדפן, ולא ב־UTC. קורא בניו יורק יראה את אותה חותמת זמן כיום חמישי, 31 בדצמבר 2020, בשעה 19:00:00, משום שניו יורק הייתה באותו יום חמש שעות מאחורי UTC.
חותמת זמן יכולה להיות גם שלילית, והיא מייצגת תאריך שלפני 1970. לדוגמה, -86400 הוא בדיוק יום אחד לפני התקופה: 31 בדצמבר 1969, 00:00:00 UTC.
דיוק חותמות זמן: שניות, אלפיות שנייה ומיליוניות שנייה
לא כל מערכת מודדת זמן בשניות. ממיר זה בוחן כמה ספרות יש בחותמת הזמן ומנחש את רמת הדיוק שלה:
| ספרות | רמת דיוק | דוגמה |
|---|---|---|
| 10 | שניות | 1609459200 |
| 13 | אלפיות שנייה | 1609459200000 |
| 16 | מיליוניות שנייה | 1609459200000000 |
חותמת זמן שלילית מקבלת תו נוסף עבור סימן המינוס, ולכן -1609459200 (11 תווים, 10 ספרות) עדיין נקראת כשניות. כל מספר אחר של ספרות מטופל כשניות רגילות. ערכים באלפיות שנייה ובמיליוניות שנייה מחולקים ב־1,000 או ב־1,000,000 לפני החלת נוסחת השניות שלעיל.
פורמט זמן של 12 שעות ושל 24 שעות
הממיר מציע שתי דרכים להצגת השעה ביום.
- פורמט של 24 שעות סופר את השעות מ־0 עד 23, ללא ציון AM או PM. מתכנתים מכנים אותו לפעמים השעון הצבאי. 3:00 אחר הצהריים נכתב 15:00.
- פורמט של 12 שעות סופר את השעות מ־1 עד 12, ומוסיף AM לפרק הזמן מחצות עד הצהריים ו־PM לפרק הזמן מהצהריים עד חצות. 15:00 בפורמט של 24 שעות הופך ל־3:00 PM.
הפורמט של 24 שעות הוא המקובל ברוב אירופה, אמריקה הלטינית ואסיה, וכן במסגרות מדעיות, צבאיות ורפואיות בכל העולם. הפורמט של 12 שעות עדיין נפוץ בשימוש יומיומי בארצות הברית, בקנדה ובכמה מדינות דוברות אנגלית אחרות.
טווח התאריכים הנתמך
ממיר זה מקבל כל חותמת זמן מ־-62135596800 עד 253402300799. טווח זה כולל כל תאריך מ־1 בינואר של השנה 1 ועד 31 בדצמבר 9999, בלוח הגרגוריאני הפרולפטי, כלומר בלוח המודרני המוחל לאחור מעבר להצגתו בשנת 1582. חותמות זמן מחוץ לטווח זה נדחות בשגיאת טווח.
בעיית שנת 2038
מערכות מחשב ישנות רבות מאחסנות חותמת זמן של Unix כמספר שלם מסומן בגודל 32 סיביות, שיכול לספור רק עד 2,147,483,647. מספר שניות זה לאחר התקופה חל בתאריך 19 בינואר 2038, בשעה 03:14:07 UTC. לאחר רגע זה, מערכת 32 סיביות שלא עודכנה חוזרת למספר שלילי וקוראת את התאריך כשייך לשנת 1901 במקום לשנת 2038. תופעה זו ידועה כבעיית שנת 2038. היא אינה משפיעה על כל המערכות: תוכנות מודרניות המאחסנות חותמות זמן כמספרים בגודל 64 סיביות, או כמספרים רגילים כפי שעושה JavaScript, יכולות לייצג תאריכים אלפי שנים מעבר ל־2038 ללא גלישה.
שימושים נפוצים בחותמות זמן של Unix
חותמות זמן של Unix מופיעות ברחבי עולם המחשוב, משום שהן קומפקטיות וקל להשוות או למיין אותן:
- שורות במסדי נתונים משתמשות בהן כדי לתעד מתי רשומה נוצרה או שונתה לאחרונה.
- שרתי אינטרנט משתמשים בהן בכותרות HTTP ובעוגיות כדי לשלוט במטמון ובתפוגה.
- קובצי יומן חותמים כל אירוע באחת מהן, כך שניתן לסדר את הרשומות לפי הסדר.
- Git ומערכות אחרות לבקרת גרסאות מתעדות כך את מועדי ביצוע השינויים.
- ממשקי API באינטרנט משתמשים בהן כדי לציין מתי נתונים נוצרו או עודכנו לאחרונה.
שאלות נפוצות
מהי תקופת Unix? תקופת Unix היא חצות UTC בתאריך 1 בינואר 1970. זוהי נקודת האפס שממנה כל חותמות הזמן של Unix סופרות.
האם חותמת זמן של Unix כוללת שניות מעוברות? לא. זמן Unix סופר בדיוק 86,400 שניות ביום ומתעלם מהשניות המעוברות המתווספות מדי פעם ל־UTC, ולכן הוא סוטה מעט מהזמן האסטרונומי.
האם חותמת זמן של Unix יכולה להיות שלילית? כן. ערך שלילי מייצג תאריך שלפני 1 בינואר 1970.
מדוע לחותמת הזמן שלי יש 13 ספרות במקום 10?
חותמת זמן בת 13 ספרות נמדדת באלפיות שנייה ולא בשניות. Date.now() של JavaScript וממשקי API רבים באינטרנט מחזירים חותמות זמן באלפיות שנייה, ולכן ערכים בעלי 13 ספרות נפוצים בפיתוח אתרים.
האם חותמת זמן של Unix זהה בכל אזור זמן? המספר עצמו אינו קשור לאזור זמן כלשהו. הוא תמיד סופר את השניות שחלפו מאז התקופה ב־UTC. כדי להפוך אותו לתאריך ולשעה מקומיים יש להוסיף את הפרש השעות של אותו אזור, ולכן הפלט של ממיר זה תואם לאזור הזמן של המכשיר שבו הוא פועל.
מהו התאריך המאוחר ביותר שממיר זה יכול לטפל בו? 31 בדצמבר 9999, בשעה 23:59:59 UTC, שהוא חותמת הזמן 253402300799. התאריך המוקדם ביותר הוא 1 בינואר של השנה 1, בשעה 00:00:00 UTC, שהיא חותמת הזמן -62135596800.