ההבדלים בין ZonedDateTime ל- OffsetDateTime

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

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

במדריך מהיר זה, נבחן את ההבדלים בין ZonedDateTime ו OffsetDateTime.

2. ZonedDateTime

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

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

כדי להשיג את הזרם ZonedDateTime עבור אזור מסוים, נשתמש ב:

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

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

ZonedDateTime destZonedDateTime = sourceZonedDateTime.withZoneSameInstant (destZoneId);

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

3. OffsetDateTime

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

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

ZoneOffset zoneOffSet = ZoneOffset.of ("+ 02:00"); OffsetDateTime offsetDateTime = OffsetDateTime.now (zoneOffSet);

4. ההבדלים העיקריים

ראשית, לא הגיוני (ללא המרות) להשוות ישירות שני תאריכים למידע מלא על אזור הזמן. לָכֵן, אנחנו תמיד צריכים להעדיף לאחסן OffsetDateTime במסד הנתונים מעל ZonedDateTime, שכן תאריכים עם קיזוז זמן מקומי תמיד מייצגים את אותם רגעים בזמן.

יתר על כן, שלא כמו עם ZonedDateTime, הוספת אינדקס מעל עמודה המאחסנת את OffsetDateTime לא ישנה את משמעות התאריך.

בואו נסכם במהירות את ההבדלים העיקריים.

ZonedDateTime:

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

OffsetDateTime:

  • מאחסן את כל שדות התאריך והשעה, בדיוק של ננו שניות, כמו גם את הקיזוז מ GMT / UTC (אין מידע על אזור זמן)
  • יש להשתמש בו לאחסון תאריך במסד הנתונים או לתקשורתו ברשת

5. מסקנה

במדריך זה סקרנו את ההבדלים בין ZonedDateTime וה OffsetDateTime.

כרגיל, קוד המקור השלם זמין ב- Github.


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