primer momento del día
El answer by ngeek es correcto, pero no logra ubicar la hora en el primer momento del día. Para ajustar la hora, agregue una llamada al withTimeAtStartOfDay
.
// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
org.joda.time.DateTime startOfThisMonth = new org.joda.time.DateTime().dayOfMonth().withMinimumValue().withTimeAtStartOfDay();
org.joda.time.DateTime startofNextMonth = startOfThisMonth.plusMonths(1).dayOfMonth().withMinimumValue().withTimeAtStartOfDay();
System.out.println("startOfThisMonth: " + startOfThisMonth);
System.out.println("startofNextMonth: " + startofNextMonth);
cuando se ejecuta en Seattle Estados Unidos ...
startOfThisMonth: 2013-11-01T00:00:00.000-07:00
startofNextMonth: 2013-12-01T00:00:00.000-08:00
Nota la diferencia en esas dos líneas de salida de la consola: -7 -8 vs debido Daylight Saving Time.
En general, uno siempre debe especificar la zona horaria en lugar de confiar en la predeterminada. Omitido aquí por simplicidad. Se debe agregar una línea como esta y pasar el objeto de zona horaria a los constructores utilizados en el ejemplo anterior.
// Time Zone list: http://joda-time.sourceforge.net/timezones.html (Possibly out-dated, read note on that page)
// UTC time zone (no offset) has a constant, so no need to construct: org.joda.time.DateTimeZone.UTC
org.joda.time.DateTimeZone kolkataTimeZone = org.joda.time.DateTimeZone.forID("Asia/Kolkata");
java.time
Lo anterior es correcta pero anticuado. La biblioteca Joda-Time ahora está suplantada por el marco java.time integrado en Java 8 y posterior.
El LocalDate
representa un valor de fecha solamente sin hora del día y sin zona horaria.Un huso horario es crucial para determinar una fecha. Para cualquier momento dado, la fecha varía según la zona del mundo.
ZoneId zoneId = ZoneId.of("America/Montreal");
LocalDate today = LocalDate.now(zoneId);
Utilice una de las TemporalAdjusters
para conseguir primer día del mes.
LocalDate firstOfMonth = today.with(TemporalAdjusters.firstDayOfMonth());
El LocalDate
puede generar una ZonedDateTime
que representa el primer momento del día.
ZonedDateTime firstMomentOfCurrentMonth = firstOfMonth.atStartOfDay(zoneId);
El título de la pregunta debe mencionar Joda Time. –
Lo hace "Podría alguien por favor demuestra este caso de uso con joda-time". He agregado otra nota para que quede más claro que esta es una pregunta de tiempo joda. –
@MaximVeksler Lachlan Roche dijo que * title * debería mencionar a Joda-Time. Hice la edición. –