כיצד להגדיר את אזור הזמן של JVM

1. סקירה כללית

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

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

2. מבוא לאזור זמן

כברירת מחדל, ה- JVM קורא מידע על אזור הזמן ממערכת ההפעלה. מידע זה מועבר ל אזור זמן class, המאחסן את אזור הזמן ומחשב את שעון הקיץ.

אנחנו יכולים לקרוא לשיטה getDefault, שיחזיר את אזור הזמן בו פועלת התוכנית. יתר על כן, אנו יכולים להשיג רשימה של מזהי אזורי זמן נתמכים מהאפליקציה באמצעות TimeZone.getAvailableIDs ().

בעת מתן שמות לאזור הזמן, ג'אווה מסתמכת על מוסכמות השמות של מסד נתונים tz.

3. שינוי אזור הזמן

בחלק זה נבחן כמה דרכים בהן אנו יכולים לשנות את אזור הזמן ב- JVM.

3.1. הגדרת משתנה לסביבה

נתחיל בלראות כיצד נוכל להשתמש במשתנה סביבה לשינוי אזור הזמן. אנו יכולים להוסיף או לשנות משתנה סביבה TZ.

לדוגמה, בסביבות מבוססות לינוקס אנו יכולים להשתמש ב- יְצוּא פקודה:

ייצא TZ = "אמריקה / Sao_Paulo"

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

לוח שנה לוח שנה = Calendar.getInstance (); assertEquals (calendar.getTimeZone (), TimeZone.getTimeZone ("אמריקה / Sao_Paulo"));

3.2. הגדרת טיעון JVM

חלופה להגדרת משתנה סביבה היא הגדרת ארגומנט JVM user.timezone. טיעון JVM זה מקבל עדיפות על פני משתנה הסביבה TZ.

לדוגמא, אנו יכולים להשתמש בדגל כאשר אנו מריצים את היישום שלנו:

java -Duser.timezone = "אסיה / קולקטה" com.company.Main

כמו כן, אנו יכולים גם להגדיר את טיעון JVM מהיישום:

System.setProperty ("user.timezone", "אסיה / קולקטה");

כעת אנו יכולים לראות שאזור הזמן הוא אסיה / קולקטה:

לוח שנה לוח שנה = Calendar.getInstance (); assertEquals (calendar.getTimeZone (), TimeZone.getTimeZone ("אסיה / קולקטה"));

3.3. הגדרת אזור הזמן מהיישום

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

הגדרת אזור הזמן המוגדר כברירת מחדל היא קלה:

TimeZone.setDefault (TimeZone.getTimeZone ("פורטוגל"));

כצפוי, אזור הזמן הוא עכשיו פּוֹרטוּגָל:

לוח שנה לוח שנה = Calendar.getInstance (); assertEquals (calendar.getTimeZone (), TimeZone.getTimeZone ("פורטוגל"));

4. מלכודות

4.1. שימוש במזהים של אזור זמן בן שלוש אותיות

למרות שאפשר להשתמש בתעודות זהות של שלוש אותיות כדי לייצג את אזור הזמן, זה לא מומלץ.

במקום זאת, עלינו להשתמש בשמות הארוכים יותר, מכיוון שהמזהים של שלוש האותיות אינם חד משמעיים. לדוגמא, IST יכול להיות זמן רגיל של הודו, זמן תקן אירי או שעון ישראלי.

4.2. הגדרות כלליות

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

לדוגמא, אנו כנראה צריכים לתרגם זמן לאזור הזמן של משתמש הקצה, ולכן אזור זמן עולמי לא היה הגיוני במיוחד. אם אין צורך באזור זמן גלובלי, שקול לציין את אזור הזמן ישירות בכל מופע תאריך-שעה. אוֹ ZonedDateTime אוֹ OffsetDateTime הוא שיעור שימושי לכך.

5. מסקנה

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

כרגיל, כל הדוגמאות המשמשות במאמר זה זמינות באתר GitHub.


$config[zx-auto] not found$config[zx-overlay] not found