Trilhas
/
Java
Java
/
Exercícios
/
Agendando para a beleza
Agendando para a beleza

Agendando para a beleza

Exercício de aprendizagem

Introdução

Data e hora

O pacote java.time, introduzido no Java 8, contém várias classes para trabalhar com datas e horas.

LocalDate

A classe java.time.LocalDate representa uma data sem fuso horário no sistema de calendário ISO-8601, como 2007-12-03:

LocalDate date = LocalDate.of(2007, 12, 3);

Datas podem ser comparadas com outras datas:

LocalDate date1 = LocalDate.of(2007, 12, 3);
LocalDate date2 = LocalDate.of(2007, 12, 4);

date1.isBefore(date2);
// => true

date1.isAfter(date2);
// => false

Uma instância de LocalDate tem getters para extrair partes dela:

LocalDate date = LocalDate.of(2007, 12, 3);

date.getDayOfMonth();
// => 3

Uma instância de LocalDate tem métodos para adicionar unidades de tempo a ela:

Note

Esses métodos retornam uma nova instância de LocalDate e não atualizam a instância existente, pois a classe LocalDate é imutável.

LocalDate date = LocalDate.of(2007, 12, 3);

date.plusDays(3);
// => 2007-12-06

LocalDateTime

A classe java.time.LocalDateTime representa uma data e hora sem fuso horário no sistema de calendário ISO-8601, como 2007-12-03T10:15:30:

LocalDateTime datetime = LocalDateTime.of(2007, 12, 3, 10, 15, 30);

Você pode converter uma instância de LocalDate em uma LocalDateTime:

LocalDate date = LocalDate.of(2007, 12, 3);
LocalDateTime datetime = date.atTime(10, 15, 30);
datetime.toString();
// => "2007-12-03T10:15:30"

Formatação de datas e horas

Tanto LocalDate quanto LocalDateTime usam a notação padrão ISO-8601 ao converter de e para uma String.

LocalDateTime datetime = LocalDateTime.of(2007, 12, 3, 10, 15, 30);
LocalDateTime parsed = LocalDateTime.parse("2007-12-03T10:15:30");

datetime.isEqual(parsed);
// => true

Não é possível fazer o parse de uma LocalDate ou LocalDateTime a partir de uma String assim usando um formato diferente. Em vez disso, para formatar datas usando um formato personalizado, você deve usar o 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"

Um locale também pode ser especificado ao criar o formato personalizado, para formatar e fazer o parse de regiões diferentes:

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

Instruções

Neste exercício, você vai trabalhar em um agendador de compromissos para um salão de beleza em Nova York que abriu em 15 de setembro de 2012.

1. Converter a data de um compromisso

Implemente o método AppointmentScheduler.schedule() para converter uma representação textual de uma data de compromisso no LocalDateTime correspondente:

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

2. Verificar se um compromisso já passou

Implemente o método AppointmentScheduler.hasPassed(), que recebe uma data de compromisso e verifica se o compromisso ficou em algum momento no passado:

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

3. Verificar se o compromisso é à tarde

Implemente o método AppointmentScheduler.isAfternoonAppointment(), que recebe uma data de compromisso e verifica se o compromisso é à tarde (>= 12:00 e < 18:00):

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

4. Descrever a data e o horário do compromisso

Implemente o método AppointmentScheduler.getDescription(), que recebe uma data de compromisso e retorna uma descrição dessa data e desse horário:

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. Retornar a data de aniversário

Implemente o método AppointmentScheduler.getAnniversaryDate(), que retorna a data de aniversário deste ano, que é 15 de setembro:

AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.getAnniversaryDate()
// => LocalDate.of(<current year>, 9, 15)
Editar via GitHub O link abre em uma nova janela ou aba
Java Exercism

Tudo pronto para começar Agendando para a beleza?

Crie sua conta no Exercism para aprender e dominar Java com 26 conceitos158 exercícios e mentoria humana de verdade, tudo de graça.