The java.time package introduced in Java 8 contains several classes to work with dates and time.
LocalDateThe java.time.LocalDate class represents a date without a time-zone in the ISO-8601 calendar system, such as 2007-12-03:
LocalDate date = LocalDate.of(2007, 12, 3);
Dates can be compared to other dates:
LocalDate date1 = LocalDate.of(2007, 12, 3);
LocalDate date2 = LocalDate.of(2007, 12, 4);
date1.isBefore(date2);
// => true
date1.isAfter(date2);
// => false
A LocalDate instance has getters to retrieve time portions from it:
LocalDate date = LocalDate.of(2007, 12, 3);
date.getDayOfMonth();
// => 3
A LocalDate instance has methods to add time units to it:
These methods return a new LocalDate instance and do not update the existing instance, as the LocalDate class is immutable.
LocalDate date = LocalDate.of(2007, 12, 3);
date.addDays(3);
// => 2007-12-06
LocalDateTimeThe java.time.LocalDateTime class represents a date-time without a time-zone in the ISO-8601 calendar system, such as 2007-12-03T10:15:30:
LocalDateTime datetime = LocalDateTime.of(2007, 12, 3, 10, 15, 30);
You can convert a LocalDate instance into a LocalDateTime:
LocalDate date = LocalDate.of(2007, 12, 3);
LocalDateTime datetime = date.atTime(10, 15, 30);
datetime.toString();
// => "2007-12-03T10:15:30"
Both LocalDate and LocalDateTime use the ISO-8601 standard notation when converting from and to a String.
LocalDateTime datetime = LocalDateTime.of(2007, 12, 3, 10, 15, 30);
LocalDateTime parsed = LocalDateTime.parse("2007-12-03T10:15:30");
datetime.isEqual(parsed);
// => true
Attempting to parse a LocalDate or LocalDateTime from a String like this using a different format is not possible.
Instead, to format dates using a custom format, you should use the 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"
In this exercise you'll be working on an appointment scheduler for a beauty salon in New York that opened on September 15th in 2012.
Implement the AppointmentScheduler.schedule() method to parse a textual representation of an appointment date into the corresponding LocalDateTime:
AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.schedule("7/25/2019 13:45:00");
// => LocalDateTime.of(2019, 7, 25, 13, 45, 0)
Implement the AppointmentScheduler.hasPassed() method that takes an appointment date and checks if the appointment was somewhere in the past:
AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.hasPassed(LocalDateTime.of(1999, 12, 31, 9, 0, 0));
// => true
Implement the AppointmentScheduler.isAfternoonAppointment() method that takes an appointment date and checks if the appointment is in the afternoon (>= 12:00 and < 18:00):
AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.isAfternoonAppointment(LocalDateTime.of(2019, 03, 29, 15, 0, 0))
// => true
Implement the AppointmentScheduler.getDescription() method that takes an appointment date and returns a description of that date and time:
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."
Implement the AppointmentScheduler.getAnniversaryDate() method that returns this year's anniversary date, which is September 15th:
AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.getAnniversaryDate()
// => LocalDate.of(<current year>, 9, 15)
Sign up to Exercism to learn and master Java with 25 concepts, 147 exercises, and real human mentoring, all for free.