Eu sei que há muitas perguntas sobre SO sobre como obter, mas eu quero e exemplo usando a nova API do Java 8 Date. Eu também conheço a biblioteca JodaTime, mas quero uma maneira de trabalhar sem bibliotecas externas.
A função precisa reclamar com estas restrições:
- Evitar erros a partir da data de economia
- Entrada são dois objetos de Data (sem hora, eu sei localdatetime, mas preciso fazer com instâncias de data)
DAYS.between(localDate1, localDate2)
.Respostas:
Se você deseja dias lógicos de calendário , use o
DAYS.between()
método dejava.time.temporal.ChronoUnit
:Se você quiser dias literais de 24 horas (uma duração ), poderá usar a
Duration
classe:Para mais informações, consulte este documento .
fonte
Duration.between(today.atTime(0, 0), yesterday.atTime(0, 0)).toDays()
.today.atTime(0, 0)
você pode fazertoday.atStartOfDay()
.ChronoUnit.DAYS.between(firstDate, secondDate)
Com base nos comentários do VGR, aqui está o que você pode usar:
fonte
Você pode usar
until()
:fonte
until
é que ele retorna um objeto Period . Isso retornará vários anos / meses / dias entre as duas datas, não o número real de dias. E getDays () no Período retorna apenas a parte dos dias (sem levar em consideração o número de anos ou meses), em vez do número total de dias. A segunda versão funciona exatamente como desejado para obter um número de dias entre duas datas.Você pode usar
DAYS.between
dejava.time.temporal.ChronoUnit
por exemplo
fonte
Podemos usar o método between () do ChronoUnit enum:
ChronoUnit.DAYS contam dias que completaram 24 horas .
fonte
Use os DAYS no enum java.time.temporal.ChronoUnit . Abaixo está o código de exemplo:
Saída: * Número de dias entre a data de início: 01/03/2015 e a data de término: 03-03-2016 é ==> 368. ** Número de dias entre a data de início: 03-03-2016 e a data de término: 01/03/2015 é ==> -368 *
fonte
Todo mundo está dizendo para usar o ChronoUnit.DAYS.between, mas isso apenas delega para outro método que você poderia chamar. Então você também pode fazer
firstDate.until(secondDate, ChronoUnit.DAYS)
.Os documentos de ambos mencionam as duas abordagens e dizem para usar a que for mais legível.
fonte
Aqui está:
fonte
Obtenha o número de dias antes do Natal do dia atual, tente isso
fonte
Se o objetivo é apenas obter a diferença em dias e, como as respostas acima mencionam os métodos delegados, gostaria de salientar que uma vez também pode simplesmente usar:
fonte
fonte
Eu sei que esta pergunta é para Java 8, mas com o Java 9 você pode usar:
fonte
Use a classe ou o método que melhor atenda às suas necessidades:
A Duration mede uma quantidade de tempo usando valores baseados em tempo (segundos, nanossegundos).
Um Período usa valores baseados em data (anos, meses, dias).
O método ChronoUnit.between é útil quando você deseja medir uma quantidade de tempo em uma única unidade de tempo, como dias ou segundos.
https://docs.oracle.com/javase/tutorial/datetime/iso/period.html
fonte