למה האפליקציה שבנית עם AI מציגה שעה שגויה (ואיך מתקנים אזורי זמן)

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

למה אפליקציה שנבנתה עם AI מציגה שעה שגויה?

כי שני אנשים במקומות שונים יכולים שניהם להסתכל על השעה הנכונה ולראות שני מספרים שונים — האי-התאמה הזו היא כל בעיית אזורי הזמן. לקוח במדריד קובע תור לשעה 15:00 אצלכם; אתם במקסיקו סיטי, והמסך שלכם מציג את אותו התור בשעה 8:00 בבוקר. אתם בוהים בזה, בטוחים שמשהו לא תקין.

שום דבר לא מקולקל. השעה 15:00 במדריד היא בדיוק אותו הרגע כמו 8:00 בבוקר במקסיקו סיטי. שניכם צודקים. הפער הזה — שבו שני אנשים צודקים רואים שני מספרים שונים — עומד מאחורי כמות מפתיעה של דיווחי באג מסוג “האפליקציה שלי מתנהגת מוזר”.

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

מה זה בעצם אזור זמן?

אזור זמן הוא החצי ה”מקומי” של שעה — החלק שהופך רגע אוניברסלי אחד לקריאת שעון מקומית. הנה הרעיון האחד שהופך את כל השאר להגיוני: לכל שעה יש שני חלקים.

  1. הרגע — נקודת זמן אחת שזהה בכל מקום עלי אדמות.
  2. המקום — היכן אתם נמצאים כשאתם קוראים את השעון.

“15:00” בפני עצמה חסרת משמעות. 15:00 איפה? מחשבים מטפלים בזה על ידי שמירת הרגע בפורמט ניטרלי, חסר-מקום (תשמעו את הבונה שלכם אומר “UTC” — תחשבו על זה כמו השעון בנקודת ייחוס קבועה), ואז הצגתו בשעה המקומית של כל אדם כשהוא מסתכל.

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

מה גורם לבאגים של אזורי זמן באפליקציות?

שלוש טעויות ספציפיות גורמות כמעט לכל באג של אזור זמן: שמירת קריאת שעון במקום רגע אמיתי, הצגת אזור הזמן של השרת במקום זה של המשתמש, והתעלמות ממעברי שעון קיץ.

1. האפליקציה שומרת קריאת שעון, לא רגע. מישהו בוחר “9:00 בבוקר” והאפליקציה שומרת את הטקסט “9:00 בבוקר” בלי מקום מצורף. עכשיו היא מציגה “9:00 בבוקר” לכולם, בכל מקום, וזה לפעמים בדיוק מה שרציתם (תזכורת לתרופה שאמורה להיות מופעלת ב-9 בבוקר מקומי אצל כל אחד) ולפעמים אסון (וובינר חי שאמור להתחיל ברגע אחד יחיד עבור כולם). אם האפליקציה מנחשת לא נכון לאיזו כוונה התכוונתם, השעה סוטה.

2. האפליקציה מציגה את השעה של השרת, לא של המשתמש. האפליקציה שלכם רצה על מחשב במרכז נתונים — נגיד, וירג’יניה. אם אף אחד לא אמר לה אחרת, היא תציג בשמחה לכולם את השעה של וירג’יניה. המשתמשים שלכם בלונדון עכשיו סוטים בשעות אחר הצהריים ואין להם מושג למה.

3. שעון קיץ מזיז את השעונים והאפליקציה שלכם לא שמה לב. פעמיים בשנה, במקומות רבים מזיזים את השעונים בשעה אחת. פגישה חוזרת של “כל יום שלישי ב-9:00 בבוקר” שהגדרתם בחורף פתאום עוברת ל-8:00 או 10:00 בקיץ, אם האפליקציה נעלה על היסט קבוע במקום על מקום.

שלוש גרסאות אמיתיות לזה

האירוע שהתחיל שלוש פעמים. מייסד בנה עמוד פשוט לסדנה מקוונת עם שעת התחלה אחת מודפסת עליו: “מתחיל ב-18:00.” משתתפים משלוש מדינות שונות קראו כל אחד “18:00” כשעה 18:00 המקומית שלו. שליש מהם הצטרפו שעה מאוחר מדי, כמה הצטרפו שעה מוקדם מדי, וכולם האשימו את הקישור. התיקון לא היה קישור טוב יותר — הוא היה הצגת שעת ההתחלה המקומית של כל אדם, עם האזור כתוב במפורש.

הניוזלטר שהגיע בשתיים בלילה. מייל שאמור “להישלח כל בוקר בשעה 8:00” יצא בשעה 8:00 לפי שעון השרת. עבור המחצית האירופית של הרשימה, זו הייתה אמצע הלילה. שיעורי הפתיחה של אותם נרשמים היו עגומים, ונראה היה שזו בעיית תוכן. זו הייתה בעיית אזור זמן.

יום ראשון עם התור הכפול. אפליקציית הזמנות אפשרה לשני אנשים להזמין את אותו תור עיסוי בלילה שבו השעונים “חזרו אחורה”, כי 1:30 בלילה קרתה פעמיים באותו לילה והאפליקציה התייחסה אליהן כאל אותו רגע. נדיר, אבל זה הסוג של באג שעולה לכם לקוח אמיתי והתנצלות אמיתית.

מה כדאי לבקש מהבונה שלכם כדי לתקן אזורי זמן?

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

“שמור כל שעה כרגע ב-UTC, ושמור גם את אזור הזמן של כל משתמש.”

“כשאתה מציג שעה, הצג אותה באזור הזמן של הצופה, ושים את האזור ממש לידה — למשל 15:00 (השעה שלך) או 15:00 CST.”

“לכל דבר שחוזר על עצמו — תזכורות, לוחות זמנים, אירועים חוזרים — עגן אותו למקום (כמו ‘America/Mexico_City’), לא למספר קבוע של שעות, כך ששעון קיץ יטופל אוטומטית.”

“תן לי לבדוק את זה כאילו אני במדינה אחרת.”

הבקשה האחרונה חשובה יותר משהיא נשמעת, וזה מוביל אותנו לחלק שאתם יכולים לעשות בעצמכם.

איך בודקים את האפליקציה שלכם לבאגים של אזורי זמן?

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

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

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

האם בכלל צריך לדאוג לגבי אזורי זמן?

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

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

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