המרת מחרוזת לתאריך בג'אווה

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

במדריך זה, נבדוק מספר דרכים להמיר חוּט חפצים לתוך תַאֲרִיך חפצים. נתחיל עם החדש תאריך שעה API - java.time שהוצג ב- Java 8 לפני שהסתכל על הישן java.util.Date סוג נתונים המשמש גם לייצוג תאריכים.

לסיום, נבחן גם כמה ספריות חיצוניות להמרה באמצעות Joda-Time ו- Apache Commons Lang DateUtils מעמד.

2. המרה חוּט ל LocalDate אוֹ LocalDateTime

LocalDate ו LocalDateTime הם אובייקטים של תאריך זמן שאינו ניתנים לשינוי המייצגים תאריך ולאחר מכן תאריך ושעה. כברירת מחדל, תאריכי Java הם בתבנית ISO-8601, כך שאם יש לנו מחרוזת כלשהי המייצגת תאריך ושעה בתבנית זו, אנחנו יכולים להשתמש ב- לְנַתֵחַ() ממשק API של מחלקות אלה ישירות.

הנה קצת יותר פרטים על ה- API החדש הזה.

2.1. משתמש ב לְנַתֵחַ ממשק API

ה- API של תאריך שעה לְנַתֵחַ() שיטות לניתוח א חוּט המכיל מידע על תאריך ושעה. כדי להמיר אובייקטים מחרוזת ל- LocalDate ו- LocalDateTime חפצים, ה חוּט חייב לייצג תאריך או שעה תקפים בהתאם ל- ISO_LOCAL_DATE או ISO_LOCAL_DATE_TIME.

אחרת, א DateTimeParseException יושלך בזמן הריצה.

בדוגמה הראשונה שלנו, בואו להמיר א חוּט אל א java.time.LocalDate:

תאריך LocalDate = LocalDate.parse ("05-05-2018);

גישה דומה לאמור לעיל יכולה לשמש להמרת a חוּט אל א java.time.LocalDateTime:

LocalDateTime dateTime = LocalDateTime.parse ("2018-05-05T11: 50: 55");

חשוב לציין כי שניהם LocalDate ו LocalDateTime האובייקטים הם אגנוסטיים באזור הזמן. למרות זאת, כאשר אנו צריכים להתמודד עם תאריך ושעות ספציפיים לאזור זמן, אנו יכולים להשתמש ב- ZonedDateTimeלְנַתֵחַ שיטה ישירות כדי לקבל זמן תאריך ספציפי לאזור:

ZonedDateTime zonedDateTime = ZonedDateTime.parse ("2015-05-05T10: 15: 30 + 01: 00 [אירופה / פריז]");

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

2.2. משתמש ב לְנַתֵחַ ממשק API עם מעצב מותאם אישית

המרת א חוּט עם פורמט תאריך מותאם אישית ל תַאֲרִיך אובייקט הוא פעולה נרחבת בג'אווה.

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

נתחיל בדוגמה לשימוש באחד מהמעצבים המוגדרים מראש של DateTimeFormatter:

מחרוזת DateInString = "19590709"; תאריך LocalDate = LocalDate.parse (dateInString, DateTimeFormatter.BASIC_ISO_DATE);

בדוגמה הבאה בואו ליצור מעצב שמיישם פורמט של "EEE, MMM d yyyy". פורמט זה מציין שלוש תווים לשם היום המלא של השבוע, ספרה אחת המייצגת את יום החודש, שלוש תווים המייצגות את החודש וארבע ספרות לייצוג השנה.

מעצב זה מזהה מחרוזות כמו “יום ו ', 3 בינואר 2003 ″ או "ד', 23 במרץ 1994“:

מחרוזת DateInString = "ב ', 05 מאי 1980"; מעצב DateTimeFormatter = DateTimeFormatter.ofPattern ("EEE, d MMM yyyy", Locale.ENGLISH); LocalDate dateTime = LocalDate.parse (dateInString, מעצב);

2.3. דפוסי תאריך ושעה נפוצים

בואו נסתכל על כמה דפוסי תאריך ושעה נפוצים:

  • y - שנה (1996; 96)
  • M - חודש בשנה (יולי; יולי; 07)
  • ד - יום בחודש (1-31)
  • ה - שם יום בשבוע (שישי, ראשון)
  • א סמן בין השעות אחר הצהריים (AM, PM)
  • ה - שעה ביום (0-23)
  • ח - שעה בבוקר / אחר הצהריים (1-12)
  • M - דקה בשעה (0-60)
  • ס - שנייה בדקה (0-60)

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

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

3. המרה חוּט ל java.util.Date

לפני Java 8, מנגנון התאריך והשעה של Java סופק על ידי ממשקי ה- API הישנים של java.util.Date, java.util.Calendar, ו java.util.TimeZone שיעורים שלפעמים אנחנו עדיין צריכים לעבוד איתם.

בואו נראה איך להמיר מחרוזת ל- java.util.Date לְהִתְנַגֵד:

מעצב SimpleDateFormat = חדש SimpleDateFormat ("dd-MMM-yyyy", Locale.ENGLISH); מחרוזת DateInString = "7-Jun-2013"; תאריך תאריך = formatter.parse (dateInString);

בדוגמה שלעיל, ראשית עלינו לבנות א SimpleDateFormat לְהִתְנַגֵד על ידי העברת התבנית המתארת ​​את פורמט התאריך והשעה.

לאחר מכן, עלינו להפעיל את ה- לְנַתֵחַ() שיטת העברת התאריך חוּט. אם ה חוּט הטיעון שהועבר אינו באותה תבנית כמו התבנית ואז ParseException ייזרק.

3.1. הוספת מידע על אזור זמן ל java.util.Date

חשוב לציין כי java.util.Date אין מושג של אזור זמן, ומייצג רק את מספר השניות שחלפו מאז תקופת יוניקס - 1970-01-01T00: 00: 00Z.

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

בדוגמה אחרונה זו נבחן כיצד לעצב תאריך, להוסיף מידע על אזור זמן:

מעצב SimpleDateFormat = חדש SimpleDateFormat ("dd-M-yyyy hh: mm: ss a", Locale.ENGLISH); formatter.setTimeZone (TimeZone.getTimeZone ("אמריקה / ניו_יורק"); מחרוזת DateInString = "22-01-2015 10:15:55"; תאריך תאריך = formatter.parse (dateInString); מחרוזת formattedDateString = formatter.format (תאריך);

אנו יכולים גם לשנות את אזור הזמן של JVM באופן פרוגרמטי, אך זה לא מומלץ:

TimeZone.setDefault (TimeZone.getTimeZone ("GMT"));

4. ספריות חיצוניות

עכשיו שיש לנו הבנה טובה כיצד להמיר חוּט חפצים ל תַאֲרִיך אובייקטים המשתמשים בממשקי ה- API החדשים והוותיקים המוצעים על ידי Java הליבה בואו נסתכל על כמה ספריות חיצוניות.

4.1. ספריית ג'ודה-טיים

אלטרנטיבה לליבה של Java תַאֲרִיך ו זְמַן הספרייה היא Joda-Time. למרות שהמחברים ממליצים כעת למשתמשים לעבור אליהם java.time (JSR-310) אם זה לא אפשרי אז ה- ספריית Joda-Time מספקת אלטרנטיבה מצוינת לעבודה עם תאריך ושעה. ספרייה זו מספקת כמעט את כל היכולות הנתמכות ב- Java 8 תאריך שעה פּרוֹיֶקט.

את החפץ ניתן למצוא במייבאן סנטרל:

 joda-time joda-time 2.10 

הנה דוגמה מהירה לעבודה עם התקן תאריך שעה:

מעצב DateTimeFormatter = DateTimeFormat.forPattern ("dd / MM / yyyy HH: mm: ss"); מחרוזת DateInString = "07/06/2013 10:11:59"; DateTime dateTime = DateTime.parse (dateInString, מעצב);

בואו ונראה דוגמה להגדרה מפורשת של אזור זמן:

מעצב DateTimeFormatter = DateTimeFormat.forPattern ("dd / MM / yyyy HH: mm: ss"); מחרוזת DateInString = "07/06/2013 10:11:59"; DateTime dateTime = DateTime.parse (dateInString, מעצב); DateTime dateTimeWithZone = dateTime.withZone (DateTimeZone.forID ("אסיה / קולקטה"));

4.2. Apache Commons Lang - DateUtils

ה DateUtils הכיתה מספקת רבים כלי עזר שימושיים המקלים על העבודה עם המורשת לוּחַ שָׁנָה ו תַאֲרִיך חפצים.

החפץ commons-lang3 זמין ממייבן סנטרל:

 org.apache.commons commons-lang3 3.7 

בואו להמיר תאריך חוּט באמצעות מַעֲרָך של דפוסי תאריך ל java.util.Date:

מחרוזת DateInString = "07 / 06-2013"; תאריך תאריך = DateUtils.parseDate (dateInString, מחרוזת חדשה [] {"yyyy-MM-dd HH: mm: ss", "dd / MM-yyyy"});

5. מסקנה

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

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