Como criar 2 java (data mínima e máxima) que abrangem o mês inteiro exatamente [duplicado]

Oct 28 2020

Em Java, eu faço

Date minDate = new Date(year,month,1);
Date maxDate = new Date(year,month,31); 

para filtrar os pedidos do dia 1 ao 31. Mas para alguns meses (que tem 30 dias) e para fevereiro que tem menos, isso acaba encontrando pedidos do dia 1, 2, e até 3, do mês seguinte.

Como posso criar um minDatee maxDateque abranja exatamente o mês inteiro?

Esses valores de dados são lidos por mongodb no outro lado, mas eu gostaria de fazer isso no lado java, se possível.

Respostas

3 AlonsodelArte Oct 28 2020 at 20:17

java.util.Dateestá obsoleto e por um bom motivo. No meu Scala REPL local:

scala> import java.util.Date
import java.util.Date

scala> new Date(120, 9, 1, 0, 0)
       ^
       warning: constructor Date in class Date is deprecated: see corresponding Javadoc 
for more information.
res3: java.util.Date = Thu Oct 01 00:00:00 EDT 2020

scala> new Date(120, 9, 31, 23, 59)
       ^
       warning: constructor Date in class Date is deprecated: see corresponding Javadoc 
for more information.
res4: java.util.Date = Sat Oct 31 23:59:00 EDT 2020

Se você tiver JShell, deverá ver algo semelhante.

Ok, então nem toda a Dateclasse está obsoleta, mas quase todos os seus construtores e vários de seus getters e setters. Talvez java.time.LocalDatefuncione melhor para você.

scala> import java.time.LocalDate
import java.time.LocalDate

scala> LocalDate.of(2020, 10, 1)
res5: java.time.LocalDate = 2020-10-01

scala> LocalDate.of(2020, 10, 31)
res6: java.time.LocalDate = 2020-10-31

Veja, não há necessidade de subtrair 1900 do ano. Fácil, arejado, lindo.