No meu script, preciso executar um conjunto de ações através de um intervalo de datas, com base nas datas de início e término.
Por favor, me forneça orientações para conseguir isso usando Java.
for ( currentDate = starDate; currentDate < endDate; currentDate++) {
}
Eu sei que o código acima é simplesmente impossível, mas faço isso para mostrar o que eu gostaria de alcançar.
Respostas:
Bem, você poderia fazer algo assim usando a API do tempo do Java 8 , especificamente para esse problema
java.time.LocalDate
(ou as classes equivalentes do Joda Time para Java 7 e anteriores)Eu recomendaria completamente o uso
java.time
(ou Joda Time) sobre as classesDate
/ built-inCalendar
.fonte
import
instruções.O JodaTime é bom, no entanto, por uma questão de integridade e / ou se você preferir os recursos fornecidos pela API, aqui estão as abordagens padrão da API.
Ao iniciar com
java.util.Date
instâncias como abaixo:Aqui está a
java.util.Calendar
abordagem herdada , caso você ainda não esteja no Java8:E aqui está a
java.time.LocalDate
abordagem do Java8 , basicamente exatamente a abordagem do JodaTime:Se você deseja iterar inclusive a data final, use
!start.after(end)
e!date.isAfter(end)
respectivamente.fonte
Estilo Java 8 , usando as classes java.time :
Resultado:
Alternativo:
O Java 9 adicionou o método datasUntil () :
fonte
Esta é essencialmente a mesma resposta que BalusC deu, mas um pouco mais legível com um loop while no lugar de um loop for:
fonte
Apache Commons
fonte
addDays(..)
e ela fica ainda mais curta.fonte
fonte
Podemos migrar a lógica para vários métodos para Java 7, Java 8 e Java 9 :
Então, podemos invocar esses métodos como:
A saída seria:
fonte
Date
e asCalendar
classes foram suplantadas pelas classes java.time anos atrás. Especificamente, substituído porInstant
eZonedDateDate
.Aqui está o código Java 8. Eu acho que esse código resolverá seu problema. Happy Coding
fonte
Por que não usar a época e percorrer facilmente.
fonte
Você pode escrever uma classe como ela (implementando a interface do iterador) e iterar sobre ela.
e use-o como:
fonte
Você pode tentar isso:
fonte
Isso ajudará você a começar 30 dias até a data de hoje. você pode facilmente alterar o intervalo de datas e a direção.
fonte