Manipulando Datas e Tempos
Adicionar a uma data é fácil. As classes de data e hora são imutáveis, assim como String era.
Isso significa que precisamos lembrar de atribuir os resultados desses métodos a uma referência variável para que eles não sejam perdidos.
12: LocalDate date = LocalDate.of(2014, Month.JANUARY, 20);
13: System.out.println(date); // 2014-01-20
14: date = date.plusDays(2);
15: System.out.println(date); // 2014-01-22 16: date = date.plusWeeks(1);
17: System.out.println(date); // 2014-01-29
18: date = date.plusMonths(1);
19: System.out.println(date); // 2014-02-28
20: date = date.plusYears(5);
21: System.out.println(date); // 2019-02-28
Esse código é legal porque faz exatamente o que parece. Começamos com 20 de janeiro 2014. Na linha 14, adicionamos dois dias a ele e reatribuímos a nossa variável de referência. Na linha 16, nós adicionamos uma semana. Esse método nos permite escrever código mais claro que o plusDays (7) . Agora a data é 29 de janeiro de 2014. Na linha 18, adicionamos um mês. Isso nos levaria a 29 de fevereiro de 2014. No entanto, 2014 não é um ano bissexto. (2012 e 2016 são anos bissextos.) Java é inteligente o suficiente para realizar 29 de fevereiro de 2014 não existe e nos dá 28 de fevereiro de 2014 em vez disso. Finalmente, linha 20 acrescenta cinco anos.
Existem também métodos fáceis de retroceder no tempo. Desta vez, vamos trabalhar com LocalDateTime .
22: LocalDate date = LocalDate.of(2020, Month.JANUARY, 20);
23: LocalTime time = LocalTime.of(5, 15);
24: LocalDateTime dateTime = LocalDateTime.of(date, time);
25: System.out.println(dateTime); // 2020-01-20T05:15
26: dateTime = dateTime.minusDays(1);
27: System.out.println(dateTime); // 2020-01-19T05:15
28: dateTime = dateTime.minusHours(10);
29: System.out.println(dateTime); // 2020-01-18T19:15
30: dateTime = dateTime.minusSeconds(30);
31: System.out.println(dateTime); // 2020-01-18T19:14:30
A linha 25 imprime a data original de 20 de janeiro de 2020 às 5:15 a.m. A linha 26 subtrai o dia inteiro, trazendo-nos para 19 de janeiro de 2020 às 5:15 a.m. A linha 28 subtrai 10 horas, mostrando que a data vai mudar se as horas causarem e nos levar para 18 de janeiro de 2020 às 19:15 (7:15 pm) Finalmente, a linha 30 subtrai 30 segundos. Nós vemos que, de repente, a tela valor começa a exibir segundos. Java é inteligente o suficiente para esconder os segundos e nanossegundos quando não os estamos usando.
É comum que os métodos de data e hora sejam encadeados. Por exemplo, sem a impressão declarações, o exemplo anterior poderia ser reescrito da seguinte forma:
LocalDate date = LocalDate.of(2020, Month.JANUARY, 20);
LocalTime time = LocalTime.of(5, 15);
LocalDateTime dateTime = LocalDateTime.of(date2, time)
.minusDays(1).minusHours(10).minusSeconds(30);
Quando você tem muitas manipulações para fazer, esse encadeamento é útil. tem duas maneiras pelas quais os criadores do exame podem tentar enganá-lo. O que você acha que isso imprime?
LocalDate date = LocalDate.of(2020, Month.JANUARY, 20);
date.plusDays(10);
System.out.println(date);
Imprime 20 de janeiro de 2020. Adicionando 10 dias foi inútil porque ignoramos o resultado.
Sempre que você vir tipos imutáveis, preste atenção para garantir que o valor de retorno de um chamada de método não é ignorada.
O exame também pode testar para ver se você se lembra o que cada um dos objetos de data e hora inclui. Você vê o que está errado aqui?
LocalDate date = LocalDate.of(2020, Month.JANUARY, 20);
date = date.plusMinutes(1); // DOES NOT COMPILE
LocalDate não contém tempo. Isso significa que você não pode adicionar minutos a ele. Isso pode ser complicado em uma seqüência encadeada de operações de adição / subtração, portanto, certifique-se de saber quais métodos na Tabela 3.4 podem ser chamados em quais dos três objetos.
Manipulando Datas no Java 7 e Anteriormente
À medida que você olha para todo o código na tabela a seguir para fazer cálculos de tempo da "maneira antiga" você pode ver porque o Java precisava renovar as APIs de data e hora! O "jeito antigo" levou muito de código para fazer algo simples.