Percursos
/
Java
Java
/
Exercícios
/
Marcações de beleza
Marcações de beleza

Marcações de 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);

As 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 obter as várias partes da data:

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

date.getDayOfMonth();
// => 3

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

Note

Estes métodos devolvem uma nova instância de LocalDate e não atualizam a instância existente, uma vez que 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);

Podes converter uma instância de LocalDate em 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 como 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 interpretar uma LocalDate ou LocalDateTime a partir de uma String como esta usando um formato diferente. Em vez disso, para formatar datas com um formato personalizado, deves 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"

Também podes especificar um locale ao criar o formato personalizado, para formatar e interpretar em diferentes regiões:

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 vais trabalhar num agendador de marcações para um salão de beleza em Nova Iorque que abriu a 15 de setembro de 2012.

1. Interpreta a data da marcação

Implementa o método AppointmentScheduler.schedule() para interpretar uma representação textual de uma data de marcação e convertê-la no LocalDateTime correspondente:

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

2. Verifica se uma marcação já passou

Implementa o método AppointmentScheduler.hasPassed(), que recebe uma data de marcação e verifica se a marcação ficou algures no passado:

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

3. Verifica se a marcação é à tarde

Implementa o método AppointmentScheduler.isAfternoonAppointment(), que recebe uma data de marcação e verifica se a marcação é à tarde (>= 12:00 e < 18:00):

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

4. Descreve a hora e a data da marcação

Implementa o método AppointmentScheduler.getDescription(), que recebe uma data de marcação e devolve uma descrição dessa data e dessa hora:

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

Implementa o método AppointmentScheduler.getAnniversaryDate(), que devolve 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 A ligação abre numa nova janela ou separador
Java Exercism

Estás pronto para começar Marcações de beleza?

Inscreve-te no Exercism para aprenderes e dominares Java com 26 conceitos158 exercícios, e mentoria humana real, tudo grátis.