tl; dr
Instant.now()
.toString()
2016-05-06T23: 24: 25.694Z
ZonedDateTime
.now
(
ZoneId.of( "America/Montreal" )
)
.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )
.replace( "T" , " " )
2016-05-06 19: 24: 25.694
java.time
En Java 8 y versiones posteriores, tenemos el marco java.time integrado en Java 8 y versiones posteriores. Estas nuevas clases suplantan a las viejas y problemáticas clases java.util.Date/.Calendar. Las nuevas clases están inspiradas en el exitoso marco Joda-Time , pensado como su sucesor, similar en concepto pero rediseñado. Definido por JSR 310 . Ampliado por el proyecto ThreeTen-Extra . Ver el tutorial .
Tenga en cuenta que java.time es capaz de resolución en nanosegundos (9 decimales en fracción de segundo), en comparación con la resolución en milisegundos (3 decimales) de java.util.Date y Joda-Time. Entonces, al formatear para mostrar solo 3 decimales, podría estar ocultando datos.
Si desea eliminar cualquier microsegundos o nanosegundos de sus datos, truncar.
Instant instant2 = instant.truncatedTo( ChronoUnit.MILLIS ) ;
Las clases java.time usan el formato ISO 8601 de manera predeterminada al analizar / generar cadenas. Una Z
al final es la abreviatura de Zulu
, y significa UTC .
Un Instant
representa un momento en la línea de tiempo en UTC con una resolución de hasta nanosegundos . Capturar el momento actual en Java 8 se limita a milisegundos , con una nueva implementación en Java 9 que captura hasta nanosegundos dependiendo de las capacidades del reloj de hardware de su computadora.
Instant instant = Instant.now (); // Current date-time in UTC.
String output = instant.toString ();
2016-05-06T23: 24: 25.694Z
Reemplace el T
en el medio con un espacio y el Z
sin nada, para obtener la salida deseada.
String output = instant.toString ().replace ( "T" , " " ).replace( "Z" , "" ; // Replace 'T', delete 'Z'. I recommend leaving the `Z` or any other such [offset-from-UTC][7] or [time zone][7] indicator to make the meaning clear, but your choice of course.
2016-05-06 23: 24: 25.694
Como no le importa incluir el desplazamiento o la zona horaria, haga una fecha-hora "local" no relacionada con ninguna localidad en particular.
String output = LocalDateTime.now ( ).toString ().replace ( "T", " " );
Joda-Time
La exitosa biblioteca Joda-Time fue la inspiración para el marco java.time. Se recomienda migrar a java.time cuando sea conveniente.
El formato ISO 8601 incluye milisegundos, y es el predeterminado para la biblioteca Joda-Time 2.4.
System.out.println( "Now: " + new DateTime ( DateTimeZone.UTC ) );
Cuando corres ...
Now: 2013-11-26T20:25:12.014Z
Además, puede solicitar la fracción de milisegundos de segundo como número, si es necesario:
int millisOfSecond = myDateTime.getMillisOfSecond ();