examples - Cómo establecer la propiedad Time en Java usando Joda-Time
jodatime difference between dates (2)
Quiero configurar la hora, los minutos y los segundos en Joda-Time. Pero cuando lo configuro no está cambiando la propiedad.
Aquí está mi código:
import org.joda.time.DateTime;
public class JodaAkbar
{
public static void main(String args[])
{
DateTime dt = new DateTime();
System.out.println("Before:"+dt);
dt.hourOfDay().setCopy(5);
dt.minuteOfDay().setCopy(20);
dt.secondOfDay().setCopy(0);
System.out.println("After:"+dt);
}
}
Aquí está la salida.
Before:2015-04-01T11:01:38.277+11:00
After:2015-04-01T11:01:38.277+11:00
Estoy recibiendo la misma salida. ¿Qué está pasando mal aquí?
EDITAR:
Básicamente, quiero hacer algo similar como se muestra en el siguiente código. Como el siguiente código no funciona correctamente para el formato de 24 horas, cambié a Joda-Time.
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR, 13);
cal.set(Calendar.MINUTE, 25);
cal.set(Calendar.SECOND, 0);
Los objetos de Joda-Time son inmutables. La palabra "copia" en setCopy
le dice que no establece estos campos directamente, sino que crea una copia de DateTime
con ese campo modificado.
Una solución rápida es:
dt = dt.hourOfDay().setCopy(5);
dt = dt.minuteOfHour().setCopy(20);
dt = dt.secondOfMinute().setCopy(0);
Un enfoque más fluido sería encadenar varios with
métodos juntos:
DateTime dt = new DateTime()
.withHourOfDay(5)
.withMinuteOfHour(20)
.withSecondOfMinute(0);
O hazlo todo con una sola llamada withTime
:
DateTime dt = new DateTime().withTime(5, 20, 0, 0);
Por cierto, Java 8 presenta un nuevo paquete java.time
que fue inspirado por Joda-Time. El sitio web de Joda-Time recomienda "A partir de Java SE 8, los usuarios deben migrar a java.time
(JSR-310)".
Mira en estructuras de datos inmutables. Los modificadores en un objeto JodaTime no modifican realmente el objeto, sino que devuelven instancias diferentes construidas a partir del objeto original con el campo deseado establecido según lo solicitado.
Entonces, en efecto, estás construyendo una gran cantidad de elementos, y no los asignas a nada, por lo que están recogiendo basura. Finalmente, estás imprimiendo el mismo artículo (inmutable) dos veces.