Το πακέτο 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 διαθέτει getters που σου επιτρέπουν να ανακτήσεις από αυτό τμήματα χρόνου:
LocalDate date = LocalDate.of(2007, 12, 3);
date.getDayOfMonth();
// => 3
Ένα στιγμιότυπο LocalDate διαθέτει μεθόδους για να προσθέτεις χρονικές μονάδες σε αυτό:
Αυτές οι μέθοδοι επιστρέφουν ένα νέο στιγμιότυπο LocalDate και δεν ενημερώνουν το υπάρχον στιγμιότυπο, καθώς η κλάση LocalDate είναι αμετάβλητη.
LocalDate date = LocalDate.of(2007, 12, 3);
date.plusDays(3);
// => 2007-12-06
LocalDateTimeΗ κλάση java.time.LocalDateTime αναπαριστά μια ημερομηνία και ώρα χωρίς ζώνη ώρας στο σύστημα ημερολογίου ISO-8601, όπως 2007-12-03T10:15:30:
LocalDateTime datetime = LocalDateTime.of(2007, 12, 3, 10, 15, 30);
Μπορείς να μετατρέψεις ένα στιγμιότυπο 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", parser);
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
Σε αυτήν την άσκηση θα δουλέψεις πάνω σε μια εφαρμογή προγραμματισμού ραντεβού για ένα σαλόνι ομορφιάς στη Νέα Υόρκη που άνοιξε στις 15 Σεπτεμβρίου 2012.
Υλοποίησε τη μέθοδο AppointmentScheduler.schedule() ώστε να αναλύει μια κειμενική αναπαράσταση μιας ημερομηνίας ραντεβού στο αντίστοιχο LocalDateTime:
AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.schedule("7/25/2019 13:45:00");
// => LocalDateTime.of(2019, 7, 25, 13, 45, 0)
Υλοποίησε τη μέθοδο AppointmentScheduler.hasPassed() που δέχεται μια ημερομηνία ραντεβού και ελέγχει αν το ραντεβού ήταν κάποια στιγμή στο παρελθόν:
AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.hasPassed(LocalDateTime.of(1999, 12, 31, 9, 0, 0));
// => true
Υλοποίησε τη μέθοδο AppointmentScheduler.isAfternoonAppointment() που δέχεται μια ημερομηνία ραντεβού και ελέγχει αν το ραντεβού είναι απογευματινό (>= 12:00 και < 18:00):
AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.isAfternoonAppointment(LocalDateTime.of(2019, 03, 29, 15, 0, 0))
// => true
Υλοποίησε τη μέθοδο AppointmentScheduler.getDescription() που δέχεται μια ημερομηνία ραντεβού και επιστρέφει μια περιγραφή αυτής της ημερομηνίας και ώρας:
AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.getDescription(LocalDateTime.of(2019, 03, 29, 15, 0, 0))
// => "You have an appointment on Friday, March 29, 2019, at 3:00 PM."
Υλοποίησε τη μέθοδο AppointmentScheduler.getAnniversaryDate() που επιστρέφει τη φετινή ημερομηνία επετείου, που είναι η 15η Σεπτεμβρίου:
AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.getAnniversaryDate()
// => LocalDate.of(<current year>, 9, 15)
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Java με 26 έννοιες158 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.