Usando java.time
El enfoque moderno es con las clases java.time que suplantan los legados de edad clases de fecha y hora problemáticos.
Las clases de java.time son mucho más fáciles de usar. En particular, eliminan la ambigüedad planteada en la Pregunta. Puede solicitar explícitamente el anterior el domingo o el posterior el domingo.
La clase LocalDate
representa un valor de fecha solamente sin hora del día y sin zona horaria.
Enum proporciona una docena de objetos predefinidos, uno para cada mes del año. Estos objetos enumerados son más seguros de usar, pero en su lugar puede usar un número simple para el mes. A diferencia de las clases heredadas, estos meses tienen una buena cantidad, 1-12 para enero-diciembre.
LocalDate localDate = LocalDate.of(2009 , Month.AUGUST, 22);
La interfaz TemporalAdjuster
proporciona para la manipulación de los valores de fecha y hora. La clase TemporalAdjusters
(tenga en cuenta el plural s
) proporciona varias implementaciones útiles.
previous
& next
ajustadores excluyen la fecha de la consideración. Los métodos previousOrSame
& nextOrSame
devuelven la fecha en cuestión si es el día de la semana deseado.
Enum DayOfWeek
proporciona siete objetos predefinidos, uno para cada día de la semana.
LocalDate previousSunday = localDate.with(TemporalAdjusters.previous (DayOfWeek.SUNDAY));
LocalDate previousOrSameSunday = localDate.with(TemporalAdjusters.previousOrSame (DayOfWeek.SUNDAY));
LocalDate nextSunday = localDate.with(TemporalAdjusters.next (DayOfWeek.SUNDAY));
LocalDate nextOrSameSunday = localDate.with(TemporalAdjusters.nextOrSame (DayOfWeek.SUNDAY));
Volcar a la consola.
System.out.println ("localDate: " + localDate + " (" + localDate.getDayOfWeek().getDisplayName (TextStyle.FULL, Locale.US) + ")");
System.out.println ("previousSunday: " + previousSunday);
System.out.println ("nextSunday: " + nextSunday);
LocalDate: 2009-08-22 (sábado)
previousSunday: 2009-08-16
nextSunday: 2009-08-23
Acerca de java.time
El marco java.time está integrado en Java 8 y posterior. Estas clases suplantan a las viejas y problemáticas clases de fecha y hora legacy, como java.util.Date
, Calendar
, & SimpleDateFormat
.
El proyecto Joda-Time, ahora en maintenance mode, recomienda la migración a las clases java.time.
Para obtener más información, consulte el Oracle Tutorial. Y busque Stack Overflow para obtener muchos ejemplos y explicaciones. La especificación es JSR 310.
¿Dónde obtener las clases java.time?
- Java SE 8 y SE 9 y más tarde
- incorporado.
- Parte de la API estándar de Java con una implementación integrada.
- Java 9 agrega algunas características menores y correcciones.
- Java SE 6 y SE 7
- Gran parte de la funcionalidad de back-java.time está portado a Java 6 & 7 en ThreeTen-Backport.
- Android
El proyecto se extiende ThreeTen-Extra java.time con clases adicionales. Este proyecto es un terreno de prueba para posibles adiciones futuras a java.time. Puede encontrar algunas clases útiles aquí, como Interval
, YearWeek
, YearQuarter
y more.