Διαδρομές
/
Java
Java
/
Ασκήσεις
/
Κλείσε ραντεβού για ομορφιά
Κλείσε ραντεβού για ομορφιά

Κλείσε ραντεβού για ομορφιά

Άσκηση εκμάθησης

Εισαγωγή

Ημερομηνία και ώρα

Το πακέτο 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 διαθέτει μεθόδους για να προσθέτεις χρονικές μονάδες σε αυτό:

Note

Αυτές οι μέθοδοι επιστρέφουν ένα νέο στιγμιότυπο 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.

1. Ανάλυσε την ημερομηνία του ραντεβού

Υλοποίησε τη μέθοδο AppointmentScheduler.schedule() ώστε να αναλύει μια κειμενική αναπαράσταση μιας ημερομηνίας ραντεβού στο αντίστοιχο LocalDateTime:

AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.schedule("7/25/2019 13:45:00");
// => LocalDateTime.of(2019, 7, 25, 13, 45, 0)

2. Έλεγξε αν ένα ραντεβού έχει ήδη περάσει

Υλοποίησε τη μέθοδο AppointmentScheduler.hasPassed() που δέχεται μια ημερομηνία ραντεβού και ελέγχει αν το ραντεβού ήταν κάποια στιγμή στο παρελθόν:

AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.hasPassed(LocalDateTime.of(1999, 12, 31, 9, 0, 0));
// => true

3. Έλεγξε αν το ραντεβού είναι απογευματινό

Υλοποίησε τη μέθοδο AppointmentScheduler.isAfternoonAppointment() που δέχεται μια ημερομηνία ραντεβού και ελέγχει αν το ραντεβού είναι απογευματινό (>= 12:00 και < 18:00):

AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.isAfternoonAppointment(LocalDateTime.of(2019, 03, 29, 15, 0, 0))
// => true

4. Περιέγραψε την ώρα και την ημερομηνία του ραντεβού

Υλοποίησε τη μέθοδο 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."

5. Επίστρεψε την ημερομηνία επετείου

Υλοποίησε τη μέθοδο AppointmentScheduler.getAnniversaryDate() που επιστρέφει τη φετινή ημερομηνία επετείου, που είναι η 15η Σεπτεμβρίου:

AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.getAnniversaryDate()
// => LocalDate.of(<current year>, 9, 15)
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Java Exercism

Έτοιμος να ξεκινήσεις την άσκηση Κλείσε ραντεβού για ομορφιά;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Java με 26 έννοιες158 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.