studio - obtener zona horaria java
¿Cómo obtener la hora actual en el formato AAAA-MM-DD HH: MI: Sec.Millisecond en Java? (10)
El código de abajo me da la hora actual. Pero no dice nada de milisegundos.
public static String getCurrentTimeStamp() {
SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//dd/MM/yyyy
Date now = new Date();
String strDate = sdfDate.format(now);
return strDate;
}
Recibo la fecha en el formato 2009-09-22 16:47:08
(YYYY-MM-DD HH: MI: Sec) .
Pero quiero recuperar la hora actual en el formato 2009-09-22 16:47:08.128
((YYYY-MM-DD HH: MI: Sec.Ms) - donde 128 indica el milisegundo.
SimpleTextFormat
funcionará bien. Aquí, la unidad de tiempo más baja es la segunda, pero ¿cómo obtengo milisegundos también?
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 java.time posteriores, tenemos el marco java.time integrado en Java 8 y java.time posteriores. Estas nuevas clases reemplazan las problemáticas viejas 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 . Extendido por el proyecto ThreeTen-Extra . Ver el Tutorial .
Tenga en cuenta que java.time es capaz de una resolución de nanosecond (9 decimales en una fracción de segundo), en comparación con la resolución de millisecond (3 decimales) de java.util.Date y Joda-Time. Entonces, al formatear para mostrar solo 3 lugares decimales, podría estar ocultando datos.
Si desea eliminar los microsegundos o nanosegundos de sus datos, trunque.
Instant instant2 = instant.truncatedTo( ChronoUnit.MILLIS ) ;
Las clases java.time utilizan 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 resolución de hasta nanosecond . La captura del momento actual en Java 8 se limita a millisecond , con una nueva implementación en Java 9 que captura hasta nanosegundos, según las capacidades del reloj del hardware de su computadora.
Instant instant = Instant.now (); // Current date-time in UTC.
String output = instant.toString ();
2016-05-06T23: 24: 25.694Z
Reemplace la T
en el medio con un espacio y la Z
con nada para obtener el resultado deseado.
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, establezca una fecha y hora "local" no relacionada con ninguna localidad en particular.
String output = LocalDateTime.now ( ).toString ().replace ( "T", " " );
Tiempo de joda
La exitosa biblioteca Joda-Time fue la inspiración para el marco java.time. Aconsejable 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 se ejecuta ...
Now: 2013-11-26T20:25:12.014Z
Además, puede solicitar la fracción de segundo en milisegundos como un número, si es necesario:
int millisOfSecond = myDateTime.getMillisOfSecond ();
El documento en Java 8 lo nombra fraction-of-second , mientras que en Java 6 se llamó millisecond . Esto me trajo a la confusión
La forma más fácil era (antes de Java 8) usar,
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
Pero SimpleDateFormat no es seguro para subprocesos. Ni java.util.Date . Esto conducirá a problemas potenciales de concurrencia para los usuarios. Y hay muchos problemas en esos diseños existentes. Para superar esto ahora en Java 8, tenemos un paquete separado llamado java.time . Este documento de fecha y hora de Java SE 8 tiene una buena visión general al respecto.
Entonces, en Java 8, algo como lo siguiente hará el truco (para formatear la fecha / hora actual),
LocalDateTime.now()
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));
Y una cosa a destacar es que fue desarrollado con la ayuda de la popular biblioteca de terceros Joda-Time ,
El proyecto ha sido dirigido conjuntamente por el autor de Joda-Time (Stephen Colebourne) y Oracle, bajo JSR 310, y aparecerá en el nuevo paquete Java SE 8 java.time.
Pero ahora el joda-time
está desaprobando y pidió a los usuarios que migren al nuevo java.time
.
Tenga en cuenta que a partir de Java SE 8, se solicita a los usuarios que migren a java.time (JSR-310), una parte central del JDK que reemplaza este proyecto.
De todos modos habiendo dicho eso,
Si tiene una instancia de Calendar , puede usarla a continuación para convertirla al nuevo java.time
,
Calendar calendar = Calendar.getInstance();
long longValue = calendar.getTimeInMillis();
LocalDateTime date =
LocalDateTime.ofInstant(Instant.ofEpochMilli(longValue), ZoneId.systemDefault());
String formattedString = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));
System.out.println(date.toString()); // 2018-03-06T15:56:53.634
System.out.println(formattedString); // 2018-03-06 15:56:53.634
Si tuvieras un objeto Date,
Date date = new Date();
long longValue2 = date.getTime();
LocalDateTime dateTime =
LocalDateTime.ofInstant(Instant.ofEpochMilli(longValue2), ZoneId.systemDefault());
String formattedString = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));
System.out.println(dateTime.toString()); // 2018-03-06T15:59:30.278
System.out.println(formattedString); // 2018-03-06 15:59:30.278
Si acabas de tener la época de milisegundos,
LocalDateTime date =
LocalDateTime.ofInstant(Instant.ofEpochMilli(epochLongValue), ZoneId.systemDefault());
Para complementar las respuestas anteriores, aquí hay un pequeño ejemplo funcional de un programa que imprime la fecha y la hora actuales, incluidos los milisegundos.
import java.text.SimpleDateFormat;
import java.util.Date;
public class test {
public static void main(String argv[]){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
Date now = new Date();
String strDate = sdf.format(now);
System.out.println(strDate);
}
}
Simplemente puede obtenerlo en el formato que desee.
String date = String.valueOf(android.text.format.DateFormat.format("dd-MM-yyyy", new java.util.Date()));
Solo tiene que agregar el campo de milisegundos en su cadena de formato de fecha:
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
El documento API de SimpleDateFormat describe la cadena de formato en detalle.
Un Java un liner
public String getCurrentTimeStamp() {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date());
}
en estilo JDK8
public String getCurrentLocalDateTimeStamp() {
return LocalDateTime.now()
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));
}
Yo usaría algo como esto:
String.format("%tF %<tT.%<tL", dateTime);
La fecha y hora variable puede ser cualquier valor de fecha y / o hora, consulte JavaDoc para Formatter
.
prueba esto:-
http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS");
Date date = new Date();
System.out.println(dateFormat.format(date));
o
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Calendar cal = Calendar.getInstance();
System.out.println(dateFormat.format(cal.getTime()));
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");