Java: Fecha de la marca de tiempo unix


Necesito convertir una marca de tiempo unix a un objeto date.
Probé esto:

java.util.Date time = new java.util.Date(timeStamp);

El valor de la marca de tiempo es: 1280512800

La fecha debe ser "2010/07/30 - 22:30:00" (como lo obtengo por PHP) pero en su lugar obtengo Thu Jan 15 23:11:56 IRST 1970.

¿Cómo se debe hacer?

Author: Eric Leschinski, 2010-07-30

8 answers

Para 1280512800, multiplique por 1000, ya que java espera milisegundos:

java.util.Date time=new java.util.Date((long)timeStamp*1000);

Si ya tenías milisegundos, entonces solo new java.util.Date((long)timeStamp);

De la documentación :

Asigna un objeto de Fecha y inicializa para representar la número especificado de milisegundos desde el tiempo base estándar conocido como " el época", es decir, el 1 de enero de 1970, 00: 00: 00 GMT.

 380
Author: Pablo Santa Cruz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-30 19:30:00

Este es el camino correcto:

Date date = new Date ();
date.setTime((long)unix_time*1000);
 42
Author: Marco Fantasia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-13 15:52:56

Java.tiempo

Java 8 introdujo una nueva API para trabajar con fechas y horas: la java.paquete de tiempo.

Con java.tiempo que puede utilizar:

Date date = Date.from( Instant.ofEpochSecond( timeStamp ) );

Un Instantáneo representa una marca de tiempo en Java 8. Con el método estático Date.from() puede convertir un Instant a una instancia java.util.Date.

 42
Author: micha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-11 20:12:32

Parece que el calendario es el nuevo camino a seguir:

Calendar mydate = Calendar.getInstance();
mydate.setTimeInMillis(timestamp*1000);
out.println(mydate.get(Calendar.DAY_OF_MONTH)+"."+mydate.get(Calendar.MONTH)+"."+mydate.get(Calendar.YEAR));

La última línea es solo un ejemplo de cómo usarla, esta imprimiría por ejemplo "14.06.2012".

Si ha utilizado el Sistema.currentTimeMillis () para guardar la marca de tiempo no necesita la parte "*1000".

Si tiene la marca de tiempo en una cadena, primero debe analizarla como long: Long.parseLong (marca de tiempo).

Https://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html

 25
Author: Stefan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-12 15:55:35

Tl; dr

Instant.ofEpochSecond( 1_280_512_800L )

2010-07-30T18:00: 00Z

Java.tiempo

El nuevo java.time framework integrado en Java 8 y posteriores es el sucesor de Joda-Time.

Estas nuevas clases incluyen un práctico método de fábrica para convertir una cuenta de segundos enteros desde epoch. Obtienes un Instant, un momento en la línea de tiempo en UTC con una resolución de hasta nanosegundos.

Instant instant = Instant.ofEpochSecond( 1_280_512_800L );
[35] Instantáneo.toString(): 2010-07-30T18:00:00Z

Véase ese código se ejecuta en vivo en IdeOne.com .

Asia/Kabul o Asia/Tehran zonas horarias ?

Usted reportó obtener un valor de hora del día de 22:30 en lugar de las 18:00 que se ven aquí. Sospecho que su utilidad PHP está aplicando implícitamente una zona horaria predeterminada para ajustar desde UTC. Mi valor aquí es UTC, significado por el Z (abreviatura de Zulu, significa UTC). Cualquier posibilidad de que su sistema operativo de la máquina o PHP se establezca en Asia/Kabul o Asia/Tehran ¿zonas horarias? Supongo que así como usted informa IRST en su salida que aparentemente significa tiempo de Irán. Actualmente en 2017 esas son las únicas zonas que operan con una hora de verano que está cuatro horas y media por delante de UTC.

Especificar un apropiado nombre de la zona horaria en el formato continent/region, tales como America/Montreal, Africa/Casablanca, o Pacific/Auckland. Nunca use la abreviatura de 3-4 letras como EST o IST o IRST ya que son no zonas horarias verdaderas, no estandarizadas y ni siquiera únicas (!).

Si quieres ver tu momento a través de la lente de la zona horaria de una región en particular, aplicar un ZoneId para obtener un ZonedDateTime. Sigue siendo el mismo momento simultáneo, pero visto como un tiempo de reloj de pared diferente.

ZoneId z = ZoneId.of( "Asia/Tehran" ) ;
ZonedDateTime zdt = instant.atZone( z );  // Same moment, same point on timeline, but seen as different wall-clock time.

2010-07-30T22:30+04:30[Asia/Teherán]

Conversión de java.tiempo para las clases heredadas

Deberías seguir con el nuevo java.clases de tiempo. Pero puede convertir a viejo si es necesario.

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

Joda-Tiempo

ACTUALIZACIÓN: El Joda-Time el proyecto está ahora en modo de mantenimiento, con el equipo asesorando la migración a la java.tiempo clases.

Para su información, el constructor de un Joda-Time DateTime es similar: Multiplicar por mil para producir un long (no un int!).

DateTime dateTime = new DateTime( ( 1_280_512_800L * 1000_L ), DateTimeZone.forID( "Europe/Paris" ) );

Lo mejor es evitar el java notoriamente problemático.útil.Fecha y .Clases de calendario. Pero si debes usar una Fecha, puedes convertir de Joda-Time.

java.util.Date date = dateTime.toDate();

Acerca de java.tiempo

El java.hora el framework está integrado en Java 8 y versiones posteriores. Estas clases suplantan a las problemáticas antiguas legacy clases de fecha y hora como java.util.Date, Calendar, & SimpleDateFormat.

El Joda-Tiempo project, ahora en modo de mantenimiento , aconseja la migración a java .tiempo clases.

Para obtener más información, consulte el Oracle Tutorial. Y desbordamiento de pila de búsqueda para muchos ejemplos y explicaciones. La especificación es JSR 310.

Puede intercambiar java.time objetos directamente con su base de datos. Utilice un controlador JDBC compatible con JDBC 4.2 o posterior. No hay necesidad de cadenas, no hay necesidad de clases java.sql.*.

Dónde obtener java.clases de tiempo?

  • Java SE 8, Java SE 9, y tarde
    • Incorporado.
    • Parte de la API estándar de Java con una implementación incluida.
    • Java 9 añade algunas características menores y correcciones.
  • Java SE 6 y Java SE 7
    • Gran parte de java.la funcionalidad de tiempo se vuelve a portar a Java 6 y 7 en ThreeTen-Backport.
  • Android
    • Versiones posteriores de implementaciones de Android bundle de java.clases de tiempo.
    • Para Android anterior (ThreeTenABP project adapts ThreeTen-Backport (mencionado anteriormente). Véase Cómo usar ThreeTenABP....

El ThreeTen-Extra el proyecto extiende java.tiempo con clases adicionales. Este proyecto es un campo de pruebas para posibles adiciones futuras a Java.tiempo. Usted puede encontrar algunos de clases útiles aquí, tales como Interval, YearWeek, YearQuarter, y más.

 18
Author: Basil Bourque,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-02 00:28:58

El constructor de Date espera que el valor de la marca de tiempo esté en milisegundos. Multiplique el valor de su marca de tiempo con 1000, luego pase es al constructor.

 11
Author: f1sh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-30 12:24:58

Si está convirtiendo un valor de marca de tiempo en una máquina diferente, también debe verificar la zona horaria de esa máquina. Por ejemplo;

Las descripciones anteriores darán como resultado diferentes valores de fecha, si se ejecuta con zonas horarias EST o UTC.

Para establecer la zona horaria; aka a UTC, simplemente puede reescribir;

    TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
    java.util.Date time= new java.util.Date((Long.parseLong(timestamp)*1000));
 7
Author: tmr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-16 21:47:41
Date d = new Date(i * 1000 + TimeZone.getDefault().getRawOffset());
 -2
Author: Masatsugu Hosoi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-19 05:21:29