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.Date
y 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, LocalDateTime
ya 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 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 de continent/region
, por ejemplo America/Montreal
, Africa/Casablanca
o Pacific/Auckland
, u Asia/Karachi
. Nunca use el 3-4 abreviatura de letras tales como EST
o 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 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 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
. La Instant
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).
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 .