הבנת תבניות זמן בשפת Go

כאשר רוצים בדרך כלל בשפות תכנות, הורגלנו לחשוב בתבניות, שבהם אנחנו שמים סוג של place holder עבור חלק מסוים של תאריך ו/או שעה.

כאשר מדובר בשפת Go (או Golang למחפשים), הגישה בנויה מעט שונה. במקום place holder רגיל שבו "m" מייצג חודש בעל תו בודד (כלומר אם החודש הוא "5", אז הוא יופיע כ"5", אך אם החודש הוא "10", הוא יופיע כ"10") או "mm" שהוא חודש דו ספרתי (כלומר אם החודש הוא "5", אז הוא יופיע כ "05", וכאשר מדובר בחודש שהמספר שלו הוא "10", הוא עדיין יופיע כ"10") אינה מתקיימת.

התבניות האלו מוחלפות בגישה אחרת, שאותי לפחות מאוד בלבלה במשך הרבה מאוד זמן. הגישה אומרת כי יש לנו offset holders. מה הכוונה? ובכן תאריך ושעה בGo נשמרים בברירת המחדל כמספר שלם בגודל 64 ביט (כלומר int64). בנוסף, ישנו מספר בגודל 32 ביט (int32) שמחזיק בנונו השניות לשנייה מסוימת., ובנוסף לזה, יש גם מערכת לשמור מיקום.
כל המשתנים האלו מאוגדים ברשומה בשם Time.

השדה סופר בשניות, את הזמן שעבר מחצות בלילה של הראשון בינואר שנת 1 (המייצגת את הולדת ישו) ועד הרגע. היות והערך יכול להתחיל בשלילי ולסיים כחיובי, זו גם הדרך שהמידע הזה נשמר בפועל.

כאשר רוצים להמיר את המידע הזה למשהו קריא לבני אדם, יש לבצע מספר פעולות מתמטיות בנושא, כדוגמת חילוץ מידע לפי המיקום שלו. אך יש פורמט מאוד ברור בנושא, אשר בנוי לסייע בעצם להמיר את המידע.

בשביל המבנה, יצרו בגו סוג של Fixed Date שהוא המייצג את הימדע הזה:

Mon Jan 2 15:04:05 MST 2006

המידע הזה הוא נקודה קבועה היודעת להיות מתורגמת ל Unix Epoch 1136239445.

עד כאן אבל אין Offset, אלא תאריך, נכון?

כאן מגיע שלב ה Offset. אם נשים לב לתאריך, אפשר לראות כי הוא מייצג מספרים מ 1 ועד 7.
למעשה כל ספרה שכזו מייצגת מקום מסוים שקשור לתאריך המלא.

כך זה למעשה מתורגם:

  • חודש – מיוצג על ידי הספרה "1" או "01".
    • ניתן לקבל גם את שם החודש:
      • שם מקוצר: Jan
      • שם מלא: January
  • היום – מיוצג על ידי הספרה "2", או "02".
    במידה ורוצים לשמור על המיקום של 0, ללא הצגתו ניתן לכתוב גם "‎"_2 כך שקודם מגיע underscore ואז הספרה "2".

    • ניתן גם לקבל את שם היום:
      • שם מקוצר: Mon
      • שם מלא: Monday
  • השעה יכולה להיות מיוצגת כך:
    • "15" בשביל שעון שהוא 24 שעות.
    • "03" בשביל שעון שהוא על בסיס AM/PM.
  • כתיבה של AM/PM – על ידי תבנית של PM
  • דקה – "4" או "04".
  • שניה – "5" או "05".
  • השנה – "06" או "2006"
  • מיקרו שניות – "000", "000000" או "000000000"
  • איזורי זמן:
    • MST – שם איזור הזמן
    • Z07 – בישראל למשל, זה יהיה ‎.+02
    • Z0700 – תת אזור זמן, למשל הודו – ‎+0530 .
    • Z07:00 – תת אזור זמן, למשל הודו – ‎+05:30 .

הדגמה:

2 מחשבות על “הבנת תבניות זמן בשפת Go

    1. ik_5 מאת

      בפרל localtime למעשה מחזיר לך מערך עם חלקי זמן שונים.
      strftime הולך על תבנית. למשל ‎%A יהיה לך מבנה מסוים, ואתה כמובן יכול לפרק את זה למיני דברים.

      בגו, הם לקחו לך חלק קטן מתאריך מלא, ואם תשים לב הוא ממש ממוספר לך על ידי 1, 2, 3 וכיוב'. כלומר אתה שם place holders שמייצג חלק מאוד מוגדר בתאריך מאוד מוגדר.
      אז הוא קיבל על ידי מפתחי גו את המונח offset holders, כי המספר מייצג חלק מסויים במבנה התאריך.

כתיבת תגובה

הזינו את פרטיכם בטופס, או לחצו על אחד מהאייקונים כדי להשתמש בחשבון קיים:

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s