Como saber quantos dias tem determinado mês de ano em particular?
String date = "2010-01-19";
String[] ymd = date.split("-");
int year = Integer.parseInt(ymd[0]);
int month = Integer.parseInt(ymd[1]);
int day = Integer.parseInt(ymd[2]);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR,year);
calendar.set(Calendar.MONTH,month);
int daysQty = calendar.getDaysNumber(); // Something like this
java.util.Date
,java.util.Calendar
, eojava.text.SimpleDateFormat
estão agora legado , suplantado pelos java.time classes internas em Java 8 e posterior. Consulte o Tutorial da Oracle .Respostas:
Java 8 e posterior
@Warren M. Nocos. Se você estiver tentando usar a nova API de data e hora do Java 8 , poderá usar a
java.time.YearMonth
classe Consulte o Tutorial do Oracle .Teste: tente um mês em um ano bissexto:
Java 7 e anterior
Crie um calendário, defina ano e mês e use
getActualMaximum
Teste : tente um mês em um ano bissexto:
fonte
Código para java.util.Calendar
Se você precisar usar
java.util.Calendar
, suspeito que você queira:Código para o tempo de Joda
Pessoalmente, no entanto, sugiro usar o Joda Time em vez de
java.util.{Calendar, Date}
começar. Nesse caso, você pode usar:Observe que, em vez de analisar os valores de sequência individualmente, seria melhor obter a API de data / hora que você está usando para analisá-la. Em
java.util.*
você pode usarSimpleDateFormat
; em Joda Time, você usaria aDateTimeFormatter
.fonte
Você pode usar o
Calendar.getActualMaximum
método:fonte
java.time.LocalDate
No Java 1.8, você pode usar o método
lengthOfMonth
emjava.time.LocalDate
:fonte
fonte
Esta é a maneira matemática:
Por ano, mês (1 a 12):
fonte
Eu iria para uma solução como esta:
Se o mês não é fevereiro (92% dos casos), depende apenas do mês e é mais eficiente não envolver o ano. Dessa forma, você não precisa chamar a lógica para saber se é um ano bissexto e não precisa obter o ano em 92% dos casos. E ainda é um código limpo e muito legível.
fonte
No Java8, você pode usar get ValueRange a partir de um campo de uma data.
Isso permite parametrizar no campo.
fonte
Simples assim, não há necessidade de importar nada
fonte
fonte
android.util.MonthDisplayHelper
)fonte
fonte
O uso de
Calendar
API desatualizada deve ser evitado.Na versão Java8 ou superior, isso pode ser feito
YearMonth
.Código de exemplo:
fonte
Call requires API level 26 (current min is 21): java.time.YearMonth#lengthOfMonth
Vamos simplificar se você não desejar codificar o valor do ano e do mês e quiser usar o valor da data e hora atuais:
fonte
Você pode usar o método Calendar.getActualMaximum:
E o mês 1 é Por causa do mês, leva o número original do mês, enquanto no método, leva o argumento conforme mostrado abaixo em Calendar.class
E o (campo int) é como abaixo.
fonte
O método a seguir fornecerá o número de dias em um determinado mês
fonte
Uma variação ótima e de alto desempenho:
Para mais detalhes sobre o algoritmo de salto, verifique aqui
fonte
fonte
Isso funcionou bem pra mim.
Esta é uma saída de amostra
fonte
fonte