Estoy tratando de comprobar Acción de Gracias (cuarto jueves de noviembre).
Tengo ZonedDateTime
como2019-11-23T08:43:14.699-07:00[America/Los_Angeles]
¿Cómo puedo comprobar si is4th jueves o no el uso de Java 8 ZonedDateTime
api
En el calendario que tenemos Calendar.DAY_OF_WEEK_IN_MONTH
que calcular el número de semanas en un mes. ¿Hay alguna cosa en ZonedDateTime
?
Tengo esta usando el calendario.
// check Thanksgiving (4th Thursday of November)
if (cal.get(Calendar.MONTH) == Calendar.NOVEMBER
&& cal.get(Calendar.DAY_OF_WEEK_IN_MONTH) == 4
&& cal.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY) {
return false;
}
¿Cómo puedo lograr esto usando ZonedDateTime
?
Lo que necesita es la semana alineado del mes. La primera semana del mes alineado es del 1 a la 7 del mes, por lo que contiene el primer jueves de cada mes, no importa en qué día de la semana comienza el mes. La segunda semana es alineado 8 a 14 del mes, etc.
ZonedDateTime zdt = ZonedDateTime.parse("2019-11-23T08:43:14.699-07:00[America/Los_Angeles]");
if (zdt.getMonth().equals(Month.NOVEMBER)
&& zdt.get(ChronoField.ALIGNED_WEEK_OF_MONTH) == 4
&& zdt.getDayOfWeek().equals(DayOfWeek.THURSDAY)) {
System.out.println("" + zdt + " is on Thanksgiving");
}
Desde Acción de Gracias es el 28 de noviembre de este año, el fragmento anterior prueba de noviembre de 23 de no imprime nada. Tratar con el día correcto en su lugar:
ZonedDateTime zdt = ZonedDateTime.parse("2019-11-28T17:34:56.789-07:00[America/Los_Angeles]");
2019-11-28T16: 34: 56,789 a 08: 00 [America / Los_Angeles] es en Acción de Gracias