המרת תאריך ל- LocalDate או LocalDateTime ובחזרה

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

החל מ- Java 8, יש לנו ממשק API חדש של Date: java.time.

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

2. המרה java.util.Date ל java.time.LocalDate

נתחיל בהמרת ייצוג התאריך הישן לזה החדש.

כאן נוכל לנצל חדשtoInstant () שיטה, שנוספה ל java.util.Date בג'אווה 8.

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

ה atZone (ZoneId zone) ממשק API מ רֶגַע האובייקט מחזיר א ZonedDateTimeאז אנחנו רק צריכים לחלץ LocalDate ממנו באמצעות toLocalDate () שיטה.

ראשית, אנו משתמשים במערכת ברירת המחדל ZoneId:

public LocalDate convertToLocalDateViaInstant (Date dateToConvert) {date dateToConvert.toInstant () .atZone (ZoneId.systemDefault ()) .toLocalDate (); }

ופתרון דומה אך עם דרך אחרת ליצור רֶגַע לְהִתְנַגֵד - משתמש ב ofEpochMilli () שיטה:

convert Local LocalDate convertToLocalDateViaMilisecond (Date dateToConvert) {return Instant.ofEpochMilli (dateToConvert.getTime ()) .atZone (ZoneId.systemDefault ()) .toLocalDate (); }

לפני שנמשיך, בואו נסתכל במהירות על ה- ישן java.sql.Date בכיתה וכיצד ניתן להמיר זאת ל- LocalDate גם כן.

החל מג'אווה 8, אנו יכולים למצוא תוספת נוספת toLocalDate () שיטה ב java.sql.Date, מה שנותן לנו גם דרך קלה להמיר אותו ל java.time.LocalDate.

במקרה זה, איננו צריכים לדאוג לאזור הזמן:

convert Local Local Date convertToLocalDateViaSqlDate (Date dateToConvert) {החזר java.sql.Date חדש (dateToConvert.getTime ()). toLocalDate (); }

באופן דומה מאוד, אנו יכולים להמיר ישן תַאֲרִיך חפץ לתוך LocalDateTime גם חפץ. בואו נסתכל על זה בהמשך.

3. המרה java.util.Date ל java.time.LocalDateTime

לקבל LocalDateTime למשל, אנו יכולים להשתמש באופן דומה מתווך ZonedDateTime ואז השתמש ב- toLocalDateTime () ממשק API.

בדיוק כמו בעבר, אנו יכולים להשתמש בשני פתרונות אפשריים לקבלת רֶגַע חפץ מ java.util.Date:

public LocalDateTime convertToLocalDateTimeViaInstant (Date dateToConvert) {return dateToConvert.toInstant () .atZone (ZoneId.systemDefault ()) .toLocalDateTime (); } LocalDateTime public convertToLocalDateTimeViaMilisecond (Date dateToConvert) {return Instant.ofEpochMilli (dateToConvert.getTime ()) .atZone (ZoneId.systemDefault ()) .toLocalDateTime (); }

ומתחילים עם Java 8, אנחנו יכולים גם להשתמש java.sql. חותמת זמן להשיג א LocalDateTime:

ocalDateTime convertToLocalDateTimeViaSqlTimestamp (Date dateToConvert) {החזר java.sql.Timestamp חדש (dateToConvert.getTime ()). toLocalDateTime (); }

4. להמיר java.time.LocalDate ל java.util.Date

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

נדון בשתי דרכים אפשריות להמרה LocalDate ל תַאֲרִיך.

בראשון, אנו משתמשים בחדש valueOf (תאריך LocalDate) השיטה הכלולה בjava.sql.Date אובייקט, שלוקח LocalDate כפרמטר:

תאריך ציבורי convertToDateViaSqlDate (LocalDate dateToConvert) {החזר java.sql.Date.valueOf (dateToConvert); }

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

בדוגמה אחרת של Java 8, אנו משתמשים ב- רֶגַע אובייקט שאנו מעבירים ל מאת (מיידי מיידי)שיטה שלjava.util.Date לְהִתְנַגֵד:

תאריך ציבורי convertToDateViaInstant (LocalDate dateToConvert) {החזר java.util.Date.from (dateToConvert.atStartOfDay () .atZone (ZoneId.systemDefault ()) .toInstant ()); }

שימו לב שאנו משתמשים ב- רֶגַע להתנגד לכאן וכי עלינו לדאוג גם לאזורי זמן בעת ​​ביצוע המרה זו.

לאחר מכן, נשתמש בפתרון דומה מאוד להמרת a LocalDateTime אל א תַאֲרִיך לְהִתְנַגֵד.

5. להמיר java.time.LocalDateTime ל java.util.Date

הדרך הקלה ביותר להגיע א java.util.Date מ LocalDateTime הוא להשתמש בתוסף ל-java.sql. חותמת זמן - זמין עם Java 8:

תאריך ציבורי convertToDateViaSqlTimestamp (LocalDateTime dateToConvert) {החזר java.sql.Timestamp.valueOf (dateToConvert); }

אך כמובן, באמצעות פתרון חלופי an רֶגַע אובייקט, שאנו משיגים ממנו ZonedDateTime:

תאריך convertToDateViaInstant (LocalDateTime dateToConvert) {return java.util.Date .from (dateToConvert.atZone (ZoneId.systemDefault ()) .toInstant ()); }

6. תוספות Java 9

ב- Java 9 קיימות שיטות חדשות שמפשטות המרה בין java.util.Date ו java.time.LocalDate אוֹ java.time.LocalDateTime.

LocalDate.ofInstant (מיידי, אזור ZoneId מיידי) ו LocalDateTime.ofInstant (מיידי, אזור ZoneId מיידי) לספק קיצורי דרך שימושיים:

public LocalDate convertToLocalDate (Date dateToConvert) {return LocalDate.ofInstant (dateToConvert.toInstant (), ZoneId.systemDefault ()); } LocalDateTime public convertToLocalDateTime (Date dateToConvert) {return LocalDateTime.ofInstant (dateToConvert.toInstant (), ZoneId.systemDefault ()); }

7. מסקנה

במאמר זה סקרנו דרכים אפשריות להמרת ישנות java.util.Date לתוך חדש java.time.LocalDate ו java.time.LocalDateTime, כמו גם להיפך.

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


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