המרת תאריך Java ל- OffsetDateTime

1. הקדמה

במדריך זה אנו למדים על ההבדל בין תַאֲרִיך ו OffsetDateTime. אנחנו גם לומדים כיצד להמיר מאחד לשני.

2. ההבדל בין תַאֲרִיך ו OffsetDateTime

OffsetDateTime הוצג ב- JDK 8 כחלופה מודרנית ל- java.util.Date.

OffsetDateTime הוא מחלקה הבטוחה בחוטים המאחסנת תאריך ושעה בדיוק של ננו שניות. תַאֲרִיך, לעומת זאת, אינו בטיחות חוטים וחוסך זמן לדיוק באלפיות השנייה.

OffsetDateTime הוא מחלקה מבוססת ערך, מה שאומר שאנחנו צריכים להשתמש בה שווים כאשר משווים הפניות במקום == טיפוסי.

התפוקה של OffsetDateTimeשל toString השיטה היא בפורמט ISO-8601, בעוד תַאֲרִיךשל toString הוא בפורמט מותאם אישית שאינו סטנדרטי.

בוא נתקשר toString אחד משני הכיתות כדי לראות את ההבדל:

תאריך: שבת 19 באוקטובר 17:12:30 2019 אופסט תאריך זמן: 2019-10-19T17: 12: 30.174Z

תַאֲרִיך אינו יכול לאחסן אזורי זמן וקיזוזים מתאימים. הדבר היחיד שא תַאֲרִיך האובייקט מכיל הוא מספר אלפיות השנייה מאז 1 בינואר 1970, 00:00:00 UTC, כך שאם הזמן שלנו אינו ב- UTC עלינו לאחסן את אזור הזמן בכיתת עוזר. לעומת זאת, OffsetDateTime חנויות את ZoneOffset כְּלַפֵּי פְּנִים.

3. המרה תַאֲרִיך ל OffsetDateTime

ממיר תַאֲרִיך ל OffsetDateTime הוא די פשוט. אם שלנו תַאֲרִיך נמצא ב- UTC, אנו יכולים להמיר אותו בביטוי יחיד:

תאריך תאריך = תאריך חדש (); OffsetDateTime offsetDateTime = date.toInstant () .atOffset (ZoneOffset.UTC);

אם המקור תַאֲרִיך אינו נמצא ב- UTC, אנו יכולים לספק את הקיזוז (מאוחסן באובייקט עוזר, מכיוון שכאמור קודם, מחלקת התאריכים אינה יכולה לאחסן אזורי זמן).

בוא נגיד המקורי שלנו תַאֲרִיך הוא +3: 30 (זמן טהרן):

שעה int = 3; דקה int = 30; offsetDateTime = date.toInstant () .atOffset (ZoneOffset.ofHoursMinutes (שעה, דקה));

OffsetDateTime מספק שיטות שימושיות רבות בהן ניתן להשתמש לאחר מכן. למשל, אנחנו יכולים פשוט getDayOfWeek (), getDayOfMonth (), ו getDayOfYear (). קל מאוד גם להשוות שני אובייקטים OffsetDateTime isAfter ו זה לפני שיטות.

מעל הכל, זה נוהג טוב למנוע את מיושן תַאֲרִיך כיתה לחלוטין.

4. מסקנה

במדריך זה למדנו כמה פשוט להמיר תַאֲרִיך ל OffsetDateTime.

וכמו תמיד, הקוד זמין ב- Github.


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