Vídeo: Trabalhando datas 2 de 2 2024
Assim como você não pode usar os operadores de comparação embutidos da Java com datas, você também não pode usar operadores matemáticos integrados. Em vez disso, você pode executar a adição e subtração nas datas usando os vários métodos
mais
e
menos
, e você pode determinar a diferença entre duas datas usando o método
até
.
Um fato importante a ser considerado ao fazer cálculos de data e hora é que os objetos Date-Time são imutáveis. Isso significa que, uma vez que você crie um objeto Date-Time, você não pode alterar seu valor. Quando você executa um cálculo em um objeto Date-Time, o resultado é um novo objeto Data-Time com um novo valor.
Os métodos
mais
e
menos
permitem que você adicione várias unidades de data e hora a um objeto Date-Time. Existem quatro variantes de cada uma das classes
LocalDate
, permitindo adicionar ou subtrair anos, meses, semanas e dias para um objeto
LocalDate
. O código a seguir imprime a data atual, a data de amanhã e a data uma semana, um mês e um ano a partir de agora:
Sistema. Fora. println ("Hoje:" + LocalDate. now ());
Sistema. Fora. println ("Amanhã:" + LocalDate. now (). plusDays (1));
Sistema. Fora. println ("Próxima semana:" + LocalDate. now (). plusWeeks (1));
Sistema. Fora. println ("Próximo mês:" + LocalDate. now (). plusMonths (1));
Sistema. Fora. println ("Ano seguinte:" + LocalDate. now (). plusYears (1));
Para determinar a diferença entre duas datas, use o método
até
. Ele calcula a diferença entre uma data e a data passada como o primeiro parâmetro, medido nas unidades indicadas pelo segundo parâmetro. Por exemplo, o código a seguir determina o número de dias entre 16 de maio de 2014 e 15 de dezembro de 2014:
LocalDate date1 = LocalDate. analisar ("2014-05-16");
LocalDate date2 = LocalDate. analisar ("2014-12-15");
Sistema. Fora. println (date1. until (date2, ChronoUnit. DAYS));
Alguns cálculos de data podem ser um pouco mais complexos. Por exemplo, considere uma empresa que prepara faturas no dia 15 de cada mês. O seguinte fragmento de código exibe o número de dias da data atual até a próxima data de faturamento:
LocalDate hoje = LocalDate. agora();
LocalDate invDate = LocalDate. de (hoje, getYear (),
hoje. getMonthValue (), 15);
se (hoje. GetDayOfMonth ()> 15)
invDate = invDate. maisMonths (1);
long daysToInvoice = hoje. até (invDate,
ChronoUnit. DAYS);
Sistema. Fora. println (daysToInvoice
+ "até a próxima data da factura.");
Este exemplo funciona obtendo a data atual e criando um novo
LocalDate
objeto que representa o 15º do mês atual. Então, se o dia atual do mês for maior que 15, ele adiciona um mês para a data de faturamento. Em outras palavras, se for o 16º ou posterior, o faturamento ocorre no dia 15 do mês seguinte, não deste mês. Em seguida, usa o método
até
para determinar o número de dias entre a data atual ea próxima data de faturamento.
ChronoUnit
é uma enumeração que define as várias unidades de tempo que podem ser usadas nos cálculos de data e hora. Os valores possíveis são:
CENTURIES
DAYS
DECADES
ERAS
PARA SEMPRE
SEMESTES
HORAS
MICROS
MILLENNIA
MILLIS
MINUTOS
MESES
NANOS
SEGUNDOS
SEMANAS
ANOS
A maioria destes é auto-explicativo, mas dois deles são um pouco peculiares:
-
ERA
indica se A data refere-se à Era Comum (CE, também conhecida como AD) ou Antes da Era (BCE, também conhecida como BC). -
FOREVER
representa o maior valor que pode ser representado como uma duração. Infelizmente, Java não vai deixar você viver para sempre. O código a seguir lança uma exceção:
LocalDate birthday = LocalDate. analisar ("1959-05-16)";
aniversário = aniversário. mais (1, ChronoUnit. FOREVER);
Observe que
ChronoUni
t está no
java. Tempo. pacote temporal
, então, assegure-se de incluir a seguinte declaração na parte superior de qualquer programa que use
ChronoUnit
:
importar java. Tempo. temporal. *;