2010-12-27 17 views
8

Estoy intentando añadir algunos minutos a una fecha con plusMinutes, pero simplemente no añade nada en absoluto:problema añadiendo minutos con plusMinutes

Aquí está el código:

String currentDate ; 
    SimpleDateFormat myFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm"); 
    Date date1= null; 
    DateTime dt; 

    currentDate ="27/12/2010 11:29" ; 

    try { 
      date1= myFormat.parse(currentDate); 

     } catch (ParseException ex) { 

     ex.printStackTrace(); 

    } 
    dt = new DateTime(date1); 
    dt.plusMinutes(30); 
+0

FYI, el proyecto [* Joda-Time *] (http://www.joda.org/joda-time/) se encuentra ahora en [modo de mantenimiento] (https: //en.wikipedia.org/wiki/Maintenance_mode), con el equipo que recomienda la migración a [* java.time *] (http://docs.oracle.com/javase/9/docs/api/java/time/package-summary.html) clases Consulte [Tutorial de Oracle] (https://docs.oracle.com/javase/tutorial/datetime/TOC.html). Ahora use ['LocalDateTime :: plusMinutes'] (https://docs.oracle.com/javase/9/docs/api/java/time/LocalDateTime.html#plusMinutes-long-) como se muestra en [mi respuesta] (https://stackoverflow.com/a/49162285/642706) a continuación. –

Respuesta

14

Javadoc dice

Devuelve una copia de esta fecha y hora más el número especificado de Millis.

por lo

hacer algo como

dt = new DateTime(date1); 
dt = dt.plusMinutes(30); 
System.out.println(""+dt); 
+0

¡Qué tonto he sido! gracias .... y lo siento :( –

+1

@ ant18 Estoy sorprendido por 3 favoritos para esta Q. :) –

+0

Esta es realmente la implementación tonta de Joda. Si uso plusMinutes en ese objeto. Por supuesto, debería afectar el objeto en sí! : @ –

2

belleza de joda es que la mayoría de sus clases son inmutables como String en Java. Las operaciones de actualización no cambian el objeto original. Por lo tanto, plusMinutes(...) devuelve una copia nueva del DateTime con los minutos agregados que puede asignar a una nueva variable como se muestra a continuación.

DateTime newDt=dt.plusMinites(30); 
System.out.println(newDt); 
2

Creo que quieres dt = dt.plusMinutes(30);

plusMinutes devuelve una fecha y hora calculada. No modifica la fecha y hora en que se invoca.

0

tl; dr

java.time.LocalDateTime.parse( 
    "27/12/2010 11:29" , 
    DateTimeFormatter.ofPattern("dd/MM/uuuu HH:mm") 
).plusMinutes(30) 

2010-12-27T11: 59

Consejo: Si pretendía que fuera un momento, un punto específico en la línea de tiempo, aplique el contexto de un huso horario (ZoneId) para obtener un ZonedDateTime.

java.time

Su pregunta se utilizan las clases de fecha y hora viejas problemáticas de las primeras versiones de Java, y su pregunta utiliza el proyecto Joda-Time que ahora está en modo de mantenimiento. Ambos han sido suplantados por las clases java.time integradas en Java 8 y versiones posteriores.

Su entrada de cadena carece de un indicador de time zone o offset-from-UTC. Por lo tanto, analizar como java.time.LocalDateTime.

DateTimeFormatter f = DateTimeFormatter.ofPattern("dd/MM/uuuu HH:mm") ; 
LocalDateTime ldt = LocalDateTime.parse("27/12/2010 11:29" , f) ; 

ldt.toString(): 2010-12-27T11: 29

importante hacer notar que no tienen un momento real, esto es, no un punto específico en el línea de tiempo Esta es solo una vaga idea acerca de potenciales momentos a lo largo de un rango de aproximadamente 26-27 horas. Para determinar un momento real, colóquelo en el contexto de una zona horaria (o desplazamiento): ZonedDateTime zdt = ldt.atZone(ZoneId.of("Pacific/Auckland")) ;.

Agregue sus minutos.

LocalDateTime later = ldt.plusMinutes(30) ; 

later.toString(): 2010-12-27T11: 59


Sobre java.time

El marco java.time está integrado en Java 8 y luego. Estas clases suplantan a las viejas y problemáticas clases de fecha y hora de 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.

Puede intercambiar objetos de java.time directamente con su base de datos. Utilice un JDBC driver que cumpla con JDBC 4.2 o posterior. Sin necesidad de cadenas, sin necesidad de clases java.sql.*.

¿Dónde obtener las clases java.time?

  • Java SE 8, Java 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 Java SE 7
    • Gran parte de la funcionalidad de back-java.time está portado a Java 6 & 7 en ThreeTen-Backport.
  • Android
    • Las versiones posteriores de las implementaciones de haces de Android de las clases java.time.
    • Para principios de Android (< 26), el proyecto se adapta ThreeTenABPThreeTen-Backport (mencionado anteriormente). Ver How to use ThreeTenABP….

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.