tl; dr
LocalDateTime.parse(
"2016-01-23 12:34".replace( " " , "T" )
)
.atZone( ZoneId.of( "Asia/Karachi" ) )
.plusMinutes( 10 )
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.Datey java.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.
String input = "2016-01-23 12:34" ;
String inputModified = input.replace( " " , "T" );
LocalDateTime
Analice su cadena de entrada como una, LocalDateTimeya que carece de información sobre la zona horaria o el desplazamiento de UTC.
LocalDateTime ldt = LocalDateTime.parse( inputModified );
Agregue 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 .
Eso LocalDateTimeno 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 de continent/region, por ejemplo America/Montreal, Africa/Casablancao Pacific/Auckland, u Asia/Karachi. Nunca use el 3-4 abreviatura de letras tales como ESTo IST, o PKT, 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 ZoneIdpara 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 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:34supone 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. La Instantclase 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).
Instant instant = zdt.toInstant();
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.
java.util.Date utilDate = java.util.Date.from( instant );
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?
- Java SE 8 y SE 9 y posteriores
- Incorporado.
- Parte de la API estándar de Java con una implementación integrada.
- Java 9 agrega algunas funciones y correcciones menores.
- Java SE 6 y SE 7
- Gran parte de la funcionalidad de java.time está adaptada a Java 6 y 7 en ThreeTen-Backport .
- Androide
- El proyecto ThreeTenABP adapta ThreeTen-Backport (mencionado anteriormente) para Android específicamente.
- Vea Cómo usar… .
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 .