¿Cómo saber cuántos días tiene un mes en particular de un año en 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
yjava.text.SimpleDateFormat
ahora son heredadas , suplantadas por las clases java.time integradas en Java 8 y posteriores. Ver Tutorial de Oracle .Respuestas:
Java 8 y posterior
@Warren M. Nocos. Si está intentando usar la nueva API de fecha y hora de Java 8 , puede usar
java.time.YearMonth
class. Vea el tutorial de Oracle .Prueba: prueba un mes en un año bisiesto:
Java 7 y versiones anteriores
Crea un calendario, establece año y mes y usa
getActualMaximum
Prueba : prueba un mes en un año bisiesto:
fuente
Código para java.util.Calendar
Si tiene que usar
java.util.Calendar
, sospecho que quiere:Código para Joda Time
Personalmente, sin embargo, sugeriría usar Joda Time en lugar de
java.util.{Calendar, Date}
comenzar, en cuyo caso podría usar:Tenga en cuenta que, en lugar de analizar los valores de cadena individualmente, sería mejor obtener cualquier API de fecha / hora que esté utilizando para analizarlo. En
java.util.*
usted puede usarSimpleDateFormat
; en Joda Time usarías aDateTimeFormatter
.fuente
Puedes usar el
Calendar.getActualMaximum
método:fuente
java.time.LocalDate
Desde Java 1.8, puede usar el método
lengthOfMonth
enjava.time.LocalDate
:fuente
fuente
Esta es la forma matemática:
Por año, mes (1 a 12):
fuente
Yo buscaría una solución como esta:
Si el mes no es febrero (92% de los casos), depende solo del mes y es más eficiente no involucrar el año. De esta manera, no tiene que llamar a la lógica para saber si es un año bisiesto y no necesita obtener el año en el 92% de los casos. Y sigue siendo un código limpio y muy legible.
fuente
En Java8 puede usar get ValueRange de un campo de una fecha.
Esto le permite parametrizar en el campo.
fuente
Tan simple como eso, no es necesario importar nada
fuente
fuente
android.util.MonthDisplayHelper
)fuente
fuente
El uso de obsoletos
Calendar
debe evitar el API .En Java8 o una versión superior, esto se puede hacer con
YearMonth
.Código de ejemplo:
fuente
Call requires API level 26 (current min is 21): java.time.YearMonth#lengthOfMonth
Vamos a simplificarlo si no desea codificar el valor del año y el mes y desea tomar el valor de la fecha y hora actuales:
fuente
Puede usar el método Calendar.getActualMaximum:
Y el mes 1 es Debido a que el mes toma su número original de mes, mientras que en el método toma el argumento como se muestra a continuación en Calendar.class
Y el (campo int) es como a continuación.
fuente
El siguiente método le proporcionará el número de días en un mes en particular
fuente
Una variación óptima y eficaz:
Para obtener más detalles sobre el algoritmo de salto, consulte aquí
fuente
fuente
Esto funcionó bien para mi.
Esta es una salida de muestra
fuente
fuente