plus minutes java date calendar simpledateformat java.util.date

java - minutes - Cómo agregar minutos a mi Fecha



java 8 date plus minutes (11)

tl; dr

LocalDateTime.parse( "2016-01-23 12:34".replace( " " , "T" ) ) .atZone( ZoneId.of( "Asia/Karachi" ) ) .plusMinutes( 10 )

java.time

Use las excelentes clases de java.time para el trabajo de fecha y hora. Estas clases suplantan a las viejas clases problemáticas de fecha y hora como java.util.Date y java.util.Calendar .

ISO 8601

Las clases java.time usan formatos estándar ISO 8601 por defecto para analizar / generar cadenas de valores de fecha y hora. Para hacer que su cadena de entrada cumpla, reemplace el ESPACIO en el medio con una T

String input = "2016-01-23 12:34" ; String inputModified = input.replace( " " , "T" );

LocalDateTime

Analice su cadena de entrada como LocalDateTime ya que carece de información sobre la zona horaria o el desplazamiento desde UTC.

LocalDateTime ldt = LocalDateTime.parse( inputModified );

Agrega diez minutos.

LocalDateTime ldtLater = ldt.plusMinutes( 10 );

ldt.toString (): 2016-01-23T12: 34

ldtLater.toString (): 2016-01-23T12: 44

Vea el código en vivo en IdeOne.com .

Ese 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. Especifique un nombre de zona horaria adecuada en el formato continent/region , como America/Montreal , Africa/Casablanca , Pacific/Auckland o Asia/Karachi . Nunca use la abreviatura de 3-4 letras, como EST o IST o PKT ya que no son zonas horarias verdaderas, no están estandarizadas y ni siquiera son únicas (!).

ZonedDateTime

Si conoce la zona horaria prevista para este valor, aplique un ZoneId para obtener un ZonedDateTime .

ZoneId z = ZoneId.of( "Asia/Karachi" ); ZonedDateTime zdt = ldt.atZone( z );

zdt.toString (): 2016-01-23T12: 44 + 05: 00 [Asia / Karachi]

Anomalías

Piense si agregar esos diez minutos antes o después de agregar un huso horario. Puede obtener un resultado muy diferente debido a anomalías como el horario de verano (DST) que cambian la hora del reloj de pared .

Si debe agregar los 10 minutos antes o después de agregar la zona depende del significado de su escenario comercial y las reglas.

Consejo: Cuando intente un momento específico en la línea de tiempo, siempre mantenga la información de la zona horaria . No pierdas esa información, como lo hiciste con tus datos de entrada. ¿Está previsto que el valor 12:34 sea ​​mediodía en Pakistán o mediodía en Francia o mediodía en Québec? Si quería decir mediodía en Pakistán, dígalo incluyendo al menos el desplazamiento desde UTC ( +05:00 ), y mejor aún, el nombre de la zona horaria ( Asia/Karachi ).

Instant

Si desea el mismo momento que se ve a través de la lente de UTC , extraiga un Instant . La clase Instant representa un momento en la línea de tiempo en UTC con una resolución de nanoseconds (hasta nueve (9) dígitos de una fracción decimal).

Instant instant = zdt.toInstant();

Convertir

Evite las molestas clases de fecha y hora siempre que sea posible. Pero si debes hacerlo, puedes convertir. Llame a nuevos métodos agregados a las clases antiguas.

java.util.Date utilDate = java.util.Date.from( instant );

Acerca de java.time

El marco java.time está integrado en Java 8 y posterior. Estas clases suplantan a las problemáticas antiguas clases legacy fecha y hora como java.util.Date , Calendar y SimpleDateFormat .

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 de java.time?

  • Java SE 8 y SE 9 y posteriores
    • Incorporado.
    • Parte de la API Java estándar con una implementación integrada.
    • Java 9 agrega algunas características y correcciones menores.
  • Java SE 6 y SE 7
    • Gran parte de la funcionalidad de java.time se transfiere a Java 6 y 7 en ThreeTen-Backport .
  • Android
    • El proyecto ThreeTenABP adapta ThreeTen-Backport (mencionado anteriormente) específicamente para Android.
    • Vea Cómo usar ...

El proyecto ThreeTen-Extra amplía 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 .

Tengo este objeto de fecha:

SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd HH:mm"); Date d1 = df.parse(interviewList.get(37).getTime());

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());

El valor de newTime cambia a 2011-50-07 17:50 pero debería ser 07-01-2011 17:50 .

Agrega minutos correctamente, pero también cambia el mes, ¡no sé por qué!


El problema para ti es que estás usando mm . Deberías usar MM . MM es por mes y mm por minutos. Pruebe con yyyy-MM-dd HH:mm

Otro enfoque:

Puede ser tan simple como esto (otra opción es usar joda-time )

static final long ONE_MINUTE_IN_MILLIS=60000;//millisecs Calendar date = Calendar.getInstance(); long t= date.getTimeInMillis(); Date afterAddingTenMins=new Date(t + (10 * ONE_MINUTE_IN_MILLIS));


Esto está incorrectamente especificado:

SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd HH:mm");

Estás usando minutos en lugar de mes (MM)


Hay un error en el patrón de SimpleDateFormat. debería ser

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");


Método de conveniencia para implementar la respuesta de @Pangea:

/* * Convenience method to add a specified number of minutes to a Date object * From: http://.com/questions/9043981/how-to-add-minutes-to-my-date * @param minutes The number of minutes to add * @param beforeTime The time that will have minutes added to it * @return A date object with the specified number of minutes added to it */ private static Date addMinutesToDate(int minutes, Date beforeTime){ final long ONE_MINUTE_IN_MILLIS = 60000;//millisecs long curTimeInMs = beforeTime.getTime(); Date afterAddingMins = new Date(curTimeInMs + (minutes * ONE_MINUTE_IN_MILLIS)); return afterAddingMins; }


Para evitar cualquier dependencia, puede usar java.util.Calendar de la siguiente manera:

Calendar now = Calendar.getInstance(); now.add(Calendar.MINUTE, 10); Date teenMinutesFromNow = now.getTime();

En Java 8 tenemos una nueva API:

LocalDateTime dateTime = LocalDateTime.now().plus(Duration.of(10, ChronoUnit.MINUTES)); Date tmfn = Date.from(dateTime.atZone(ZoneId.systemDefault()).toInstant());


Solo para cualquiera que esté interesado. Estaba trabajando en un proyecto de iOS que requería una funcionalidad similar, así que terminé de portar la respuesta de @jeznag para poder

private func addMinutesToDate(minutes: Int, beforeDate: NSDate) -> NSDate { var SIXTY_SECONDS = 60 var m = (Double) (minutes * SIXTY_SECONDS) var c = beforeDate.timeIntervalSince1970 + m var newDate = NSDate(timeIntervalSince1970: c) return newDate }


Trabaja para mí DateUtils

//import import org.apache.commons.lang.time.DateUtils

...

//Added and removed minutes to increase current range dates Date horaInicialCorteEspecial = DateUtils.addMinutes(new Date(corteEspecial.horaInicial.getTime()),-1) Date horaFinalCorteEspecial = DateUtils.addMinutes(new Date(corteEspecial.horaFinal.getTime()),1)


Una vez que haya analizado la fecha, uso esta función de utilidad para agregar horas, minutos o segundos:

public class DateTimeUtils { private static final long ONE_HOUR_IN_MS = 3600000; private static final long ONE_MIN_IN_MS = 60000; private static final long ONE_SEC_IN_MS = 1000; public static Date sumTimeToDate(Date date, int hours, int mins, int secs) { long hoursToAddInMs = hours * ONE_HOUR_IN_MS; long minsToAddInMs = mins * ONE_MIN_IN_MS; long secsToAddInMs = secs * ONE_SEC_IN_MS; return new Date(date.getTime() + hoursToAddInMs + minsToAddInMs + secsToAddInMs); } }

Tenga cuidado al agregar largos periodos de tiempo, 1 día no siempre es 24 horas (ajustes del horario de verano, segundos intercalares, etc.), se recomienda el Calendar para eso.


puede usar la clase DateUtils en el paquete org.apache.commons.lang3.time

int addMinuteTime = 5; Date targetTime = new Date(); //now targetTime = DateUtils.addMinutes(targetTime, addMinuteTime); //add minute


usa este formato,

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");

mm por minuto y MM por mes