ZoneOffset בג'אווה

1. הקדמה

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

יתר על כן, בעוד שמייצגים אזורי זמן אלה בקוד שלנו, הדברים יכולים להיות מבלבלים. Java סיפקה מספר שיעורים כגון תַאֲרִיך, זְמַן ו תאריך שעה בעבר לטפל גם באזורי זמן.

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

במאמר זה, נדון ZoneId ו ZoneOffset כמו גם קשורים תאריך שעה שיעורים.

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

2. ZoneId ו ZoneOffset

עם כניסתו של JSR-310, נוספו כמה ממשקי API שימושיים לניהול אזורי תאריך, שעה ואזור זמן. ZoneId ו ZoneOffset כחלק מהעדכון נוסף גם שיעורים.

2.1. ZoneId

כאמור לעיל, ZoneId הוא ייצוג של אזור הזמן כמו 'אירופה / פריז‘.

יש 2 יישומים של ZoneId. ראשית, עם קיזוז קבוע בהשוואה ל- GMT / UTC. ושנית, כאזור גיאוגרפי, שיש לו סט כללים לחישוב הקיזוז עם GMT / UTC.

בואו ניצור ZoneId לברלין, גרמניה:

ZoneId zone = ZoneId.of ("אירופה / ברלין");

2.2. ZoneOffset

ZoneOffset מרחיב ZoneId ומגדירהקיזוז הקבוע של אזור הזמן הנוכחי עם GMT / UTC, כגון +02: 00.

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

LocalDateTime now = LocalDateTime.now (); ZoneId zone = ZoneId.of ("אירופה / ברלין"); ZoneOffset zoneOffSet = zone.getRules (). GetOffset (עכשיו);

במקרה שלמדינה יש 2 קיזוזים שונים - בקיץ ובחורף, יהיו 2 שונים ZoneOffset יישומים לאותו אזור, ומכאן הצורך לציין א LocalDateTime.

3. תאריך שעה שיעורים

הבא נדון בכמה תאריך שעה שיעורים, שלמעשה מנצלים ZoneId ו ZoneOffset.

3.1. ZonedDateTime

ZonedDateTime הוא ייצוג בלתי-משתנה של תאריך-שעה עם אזור זמן במערכת לוח השנה ISO-8601, כגון 2007-12-03T10: 15: 30 + 01: 00 אירופה / פאריס. א ZonedDateTime מחזיק מצב שווה ערך לשלושה אובייקטים נפרדים, א LocalDateTime, א ZoneId והנפתר ZoneOffset.

מחלקה זו מאחסנת את כל שדות התאריך והשעה, בדיוק של ננו שניות, ואזור זמן, עם ZoneOffset, לטפל בשעות תאריך מקומיות מעורפלות. לדוגמה, ZonedDateTime יכול לאחסן את הערך "2 באוקטובר 2007 בשעה 13: 45.30.123456789 +02: 00 באזור הזמן של אירופה / פריז".

בואו נקבל את הזרם ZonedDateTime לאזור הקודם:

ZoneId zone = ZoneId.of ("אירופה / ברלין"); תאריך ZonedDateTime = ZonedDateTime.now (אזור);

גם ZonedDateTime מספק פונקציות מובנות, להמרת תאריך נתון מאזור זמן אחד לאחר:

ZonedDateTime destDate = sourceDate.withZoneSameInstant (destZoneId);

3.2. OffsetDateTime

OffsetDateTime הוא ייצוג בלתי-משתנה של תאריך-שעה עם קיזוז במערכת לוח השנה ISO-8601, כגון 2007-12-03T10: 15: 30 + 01: 00.

מחלקה זו מאחסן את כל שדות התאריך והשעה, בדיוק של ננו שניות, כמו גם את הקיזוז מ GMT / UTC. לדוגמה,OffsetDateTime יכול לאחסן את הערך "2 באוקטובר 2007 בשעה 13: 45.30.123456789 +02: 00".

בואו נקבל את הזרם OffsetDateTime עם קיזוז של שעתיים מ GMT / UTC:

ZoneOffset zoneOffSet = ZoneOffset.of ("+ 02:00"); תאריך OffsetDateTime = OffsetDateTime.now (zoneOffSet);

3.3. OffsetTime

OffsetTime הוא אובייקט זמן-תאימות בלתי-משתנה המייצג זמן, הנחשב לעתים קרובות לקיזוז של שעה-דקה-שנייה, במערכת לוח השנה ISO-8601, כגון 10:15:30+01:00.

מחלקה זו מאחסנת שדות כל הזמנים, בדיוק של ננו שניות, כמו גם קיזוז אזור. לדוגמה, OffsetTime יכול לאחסן את הערך "13: 45.30.123456789 + 02: 00".

בואו נקבל את הזרםOffsetTimeעם שעתיים של קיזוז:

ZoneOffset zoneOffSet = ZoneOffset.of ("+ 02:00"); זמן OffsetTime = OffsetTime.now (zoneOffSet);

4. מסקנה

לחזור למוקד, ZoneOffset הוא ייצוג של אזור זמן במונחים של ההבדל בין GMT / UTC לזמן הנתון. זוהי דרך שימושית לייצג אזור זמן, אם כי קיימות גם ייצוגים אחרים.

יתר על כך, ZoneId ו ZoneOffset משמשים לא רק באופן עצמאי אלא גם על ידי מסוימים תאריך שעה שיעורי Java כגון ZonedDateTime, OffsetDateTime, ו OffsetTime.

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


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