Το πακέτο java.time που εισήχθη στην Java 8 περιέχει αρκετές κλάσεις για να δουλεύεις με ημερομηνίες και ώρα.
LocalDateΗ κλάση java.time.LocalDate αναπαριστά μια ημερομηνία χωρίς ζώνη ώρας στο ημερολόγιο ISO-8601, όπως 2007-12-03:
LocalDate date = LocalDate.of(2007, 12, 3);
Οι ημερομηνίες μπορούν να συγκριθούν με άλλες ημερομηνίες:
LocalDate date1 = LocalDate.of(2007, 12, 3);
LocalDate date2 = LocalDate.of(2007, 12, 4);
date1.isBefore(date2);
// => true
date1.isAfter(date2);
// => false
Ένα στιγμιότυπο LocalDate διαθέτει μεθόδους getter για να παίρνεις από αυτό τα επιμέρους μέρη της ημερομηνίας:
LocalDate date = LocalDate.of(2007, 12, 3);
date.getYear();
// => 2007
date.getMonthValue();
// => 12
date.getDayOfMonth();
// => 3
Ένα στιγμιότυπο LocalDate διαθέτει μεθόδους για να προσθέτεις χρονικές μονάδες σε αυτό.
Αυτές οι μέθοδοι επιστρέφουν ένα νέο στιγμιότυπο LocalDate και δεν ενημερώνουν το υπάρχον στιγμιότυπο, καθώς η κλάση LocalDate είναι αμετάβλητη.
LocalDate date = LocalDate.of(2007, 12, 3);
date.plusDays(3);
// => 2007-12-06
date.plusMonths(1);
// => 2008-01-03
date.plusYears(1);
// => 2008-12-03
LocalDateTimeΗ κλάση java.time.LocalDateTime αναπαριστά μια ημερομηνία και ώρα χωρίς ζώνη ώρας στο ημερολόγιο ISO-8601, όπως 2007-12-03T10:15:30:
LocalDateTime datetime = LocalDateTime.of(2007, 12, 3, 10, 15, 30);
datetime.getYear();
// => 2007
datetime.getMonthValue();
// => 12
datetime.getDayOfMonth();
// => 3
datetime.getHours();
// => 10
datetime.getMinutes();
// => 15
datetime.getSeconds();
// => 30
Όπως και η κλάση LocalDate, ένα στιγμιότυπο LocalDateTime έχει τις ίδιες μεθόδους για σύγκριση με άλλα LocalDateTime και για προσθήκη χρονικών μονάδων σε αυτό.
Είναι επίσης δυνατό να μετατρέψεις ένα στιγμιότυπο LocalDate σε LocalDateTime:
LocalDate date = LocalDate.of(2007, 12, 3);
LocalDateTime datetime = date.atTime(10, 15, 30);
datetime.toString();
// => "2007-12-03T10:15:30"
Τόσο το LocalDate όσο και το LocalDateTime χρησιμοποιούν τη συμβολική γραφή του προτύπου ISO-8601 όταν μετατρέπονται από και προς ένα String.
LocalDateTime datetime = LocalDateTime.of(2007, 12, 3, 10, 15, 30);
LocalDateTime parsed = LocalDateTime.parse("2007-12-03T10:15:30");
datetime.isEqual(parsed);
// => true
Το να κάνεις parse ένα LocalDate ή LocalDateTime από ένα String σαν αυτό χρησιμοποιώντας διαφορετική μορφή δεν είναι δυνατό.
Αντ' αυτού, για να μορφοποιήσεις ημερομηνίες με προσαρμοσμένη μορφή, θα πρέπει να χρησιμοποιήσεις το java.time.format.DateTimeFormatter:
DateTimeFormatter parser = DateTimeFormatter.ofPattern("dd/MM/yyyy");
LocalDate date = LocalDate.parse("03/12/2007", formatter);
DateTimeFormatter printer = DateTimeFormatter.ofPattern("MMMM d, yyyy");
printer.format(date);
// => "December 3, 2007"
Μπορείς επίσης να ορίσεις ένα locale κατά τη δημιουργία της προσαρμοσμένης μορφής, ώστε να μορφοποιείς και να κάνεις parse για διαφορετικές περιοχές:
DateTimeFormatter.ofPattern("MMMM d, yyyy", Locale.FRENCH).format(date);
// => décembre 3, 2007
DateTimeFormatter.ofPattern("MMMM d, yyyy", Locale.of("pt")).format(date);
// => dezembro 3, 2007