Tengo este objeto de fecha:
SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd HH:mm");
Date d1 = df.parse(interviewList.get(37).getTime());
el valor de d1 es Fri Jan 07 17:40:00 PKT 2011
Ahora estoy tratando de agregar 10 minutos a la fecha anterior.
Calendar cal = Calendar.getInstance();
cal.setTime(d1);
cal.add(Calendar.MINUTE, 10);
String newTime = df.format(cal.getTime());
Valor de los newTime
cambios, 2011-50-07 17:50
pero debería serlo 07-01-2011 17:50
.
Agrega minutos correctamente pero también cambia de mes, ¡no sé por qué!
java
date
calendar
simpledateformat
java.util.date
junaidp
fuente
fuente
Respuestas:
El problema para ti es que estás usando
mm
. Deberías usarMM
.MM
es por mes ymm
es por minutos. Prueba conyyyy-MM-dd HH:mm
Otro enfoque:
Puede ser tan simple como esto (otra opción es usar joda-time )
fuente
puede usar la clase DateUtils en el paquete org.apache.commons.lang3.time
fuente
org.apache.commons.lang.time.DateUtils
Método de conveniencia para implementar la respuesta de @ Pangea:
fuente
Para evitar cualquier dependencia, puede usar java.util.Calendar de la siguiente manera:
En Java 8 tenemos nueva API:
fuente
Esto está incorrectamente especificado:
Estás usando minutos en lugar de meses (MM)
fuente
tl; dr
java.time
Utilice las excelentes clases java.time para el trabajo de fecha y hora. Estas clases reemplazan las problemáticas clases de fecha y hora antiguas como
java.util.Date
yjava.util.Calendar
.ISO 8601
Las clases java.time utilizan formatos estándar ISO 8601 de forma predeterminada para analizar / generar cadenas de valores de fecha y hora. Para que su cadena de entrada cumpla, reemplace el ESPACIO en el medio con un
T
.LocalDateTime
Analice su cadena de entrada como una,
LocalDateTime
ya que carece de información sobre la zona horaria o el desplazamiento de UTC.Agregue diez minutos.
Vea el código en vivo en IdeOne.com .
Eso
LocalDateTime
no tiene zona horaria, por lo que no representa un punto en la línea de tiempo. Aplicar una zona horaria para traducir a un momento real. Especificar un nombre de zona horaria correcta en el formato decontinent/region
, por ejemploAmerica/Montreal
,Africa/Casablanca
oPacific/Auckland
, uAsia/Karachi
. Nunca use el 3-4 abreviatura de letras tales comoEST
oIST
, oPKT
, ya que son no verdaderas zonas de tiempo, no estandarizados, y ni siquiera único (!).ZonedDateTime
Si conoce la zona horaria prevista para este valor, aplique un
ZoneId
para obtener unZonedDateTime
.Anomalías
Piense si agregar esos diez minutos antes o después de agregar una zona horaria. Puede obtener un resultado muy diferente debido a anomalías como el horario de verano (DST) que cambian la hora del reloj de pared .
El hecho de que deba agregar los 10 minutos antes o después de agregar la zona depende del significado de su escenario comercial y las reglas.
Sugerencia: cuando desee un momento específico en la línea de tiempo, mantenga siempre la información de la zona horaria . No pierda esa información, como lo hizo con sus datos de entrada. ¿Se
12:34
supone que el valor sea mediodía en Pakistán, mediodía en Francia o mediodía en Québec? Si se refería al mediodía en Pakistán, dígalo incluyendo al menos el desplazamiento de UTC (+05:00
), y mejor aún, el nombre de la zona horaria (Asia/Karachi
).Instant
Si desea el mismo momento visto a través de la lente de UTC , extraiga un archivo
Instant
. LaInstant
clase representa un momento en la línea de tiempo en UTC con una resolución de nanosegundos (hasta nueve (9) dígitos de una fracción decimal).Convertir
Evite las problemáticas clases antiguas de fecha y hora siempre que sea posible. Pero si debe hacerlo, puede convertir. Llame a los nuevos métodos agregados a las clases antiguas.
Acerca de java.time
El marco java.time está integrado en Java 8 y versiones posteriores. Estas clases suplantar la vieja problemáticos heredados clases de fecha y hora como
java.util.Date
,Calendar
, ySimpleDateFormat
.El proyecto Joda-Time , ahora en modo de mantenimiento , aconseja la migración a java.time.
Para obtener más información, consulte el tutorial de Oracle . Y busque Stack Overflow para obtener muchos ejemplos y explicaciones. La especificación es JSR 310 .
¿Dónde obtener las clases java.time?
El proyecto ThreeTen-Extra extiende java.time con clases adicionales. Este proyecto es un campo de pruebas para posibles adiciones futuras a java.time. Usted puede encontrar algunas clases útiles aquí, como
Interval
,YearWeek
,YearQuarter
, y más .fuente
Hay un error en el patrón de SimpleDateFormat. debería ser
fuente
usa este formato,
mm por minutos y MM por mes
fuente
Una vez que haya analizado su fecha, uso esta función de utilidad para agregar horas, minutos o segundos:
Tenga cuidado al agregar largos períodos de tiempo, 1 día no siempre es 24 horas (ajustes de tipo de ahorro de luz diurna, segundos intercalares, etc.),
Calendar
se recomienda para eso.fuente
Trabaja para mí DateUtils
...
fuente
Se puede hacer sin las constantes (como 3600000 ms es 1h)
ejemplo de uso:
fuente
Solo para cualquiera que esté interesado. Estaba trabajando en un proyecto de iOS que requería una funcionalidad similar, así que terminé portando la respuesta de @jeznag a swift
fuente