Pregunta sobre php, java, timestamp – ¿Cómo convertir la marca de tiempo java a la marca de tiempo php?

7

¿Cómo puedo convertir una marca de tiempo Java como esta?1335997853142 a un formato que php puede leer?1335997853142 debiera ser02 May 2012 22:30:53.

Pero lo que sea que intento me sale errores o PHP dice1970-01-01 01:00:00 o2038-01-19 04:14:07

Ayuda PLS !!! Estoy buscando más de 1.5 h para una solución!

@Torious: no quiero usar java - estoy convirtiendo valores 1220 de un archivo xml con php a mysql user1373728
Utilizarjava.util.Calendar. Eso es todo lo que obtienes por esta gran pregunta. Torious
La marca de tiempo de Java es milisegundos del tiempo de linux, php es segundos del tiempo de linux. Divide el tiempo java por 1000 para obtener el tiempo php. Jordonias

Tu respuesta

8   la respuesta
1

Java te da una marca de tiempo en milisegundos. PHP usa Unix segundos, entonces divide por 1000:

<code>  print(date("r", 1335997853142/1000)
</code>
1

Fecha / Hora: abril / 08/2014 12:17:42 pm UTC

Marca de tiempo de Java: 1396959462222

Marca de tiempo de PHP: 1396959462

Dividir por 1000 no da exactamente la respuesta correcta porque dará un valor de doble o flotante, es decir, 1396959462.222, que no es lo que queremos. Necesitamos un número entero aquí como 1396959462. Así que la forma correcta de convertir la marca de tiempo de Java en la marca de tiempo de PHP sería usando intval ():

<code>$php_timestamp = intval($java_timestamp/1000);
</code>

En un ejemplo real, en una de mis aplicaciones Android donde envío la marca de tiempo de Java a un servidor PHP, lo hago como se mencionó anteriormente. Además, para una buena práctica de seguridad, yo, agrego un preg_replace () para asegurarse de que si alguien agregó un código de hackeo en este campo, se elimine:

<code>$php_timestamp = intval(preg_replace('/[^0-9]/', '', $java_timestamp)/1000);
</code>
1

La marca de tiempo que tiene está en milisegundos cuando debería estar en segundos

<code>$java_time = 1335997853142;
$php_time = $java_time / 1000;
$today = date("d M Y G:i:s", $php_time);
</code>

Salida

<code>02 May 2012 22:30:53
</code>
¿Está seguro de que está recuperando las entradas de xml correctamente? Jordonias
esto da para todos los valores en la matriz: 25 de enero de 1970 20:31:23 user1373728
Me faltaba un punto y coma, arreglado ahora Jordonias
8

Las marcas de tiempo de PHP son segundos, no milisegundos.

<code>echo gmdate("d M Y H:i:s",1335997853);
</code>

Que las salidas02 May 2012 22:30:53.

¡¡maldición!! ok, ahora funciona - con todas tus solutiones! ¡¡Gracias!! El problema era: la cadena tiene espacios (¡no sé por qué!). Después de un recorte () todo funcionó. lo siento chicos pero gracias a todos! user1373728
0

Es una marca de tiempo en microtiempo.

Utilizar

<code>$time = date("whatever you need", $javatime / 1000);
</code>
utilicé esto: fecha ('Y-m-d H: i: s', $ valores ['fecha'] / 1000); // 1970-01-25 21:31:23 esto: fecha ('Ymd H: i: s', (int) $ valores ['fecha'] / 1000) // 1970-01-25 21:31:23 this: date ('U = Ymd H: i: s', (int) $ values ​​['date']) // 2038-01-19 04:14:07 this: date ('U = Ymd H: i: s ', (int) $ valores [' fecha ']) // Advertencia: fecha () espera que el parámetro 2 sea largo wtf is incorrecto?!? user1373728
0

Use la función date () en php, los parámetros se encuentran aquí:http://php.net/manual/en/function.date.php

6

no es una marca de tiempo java, es milisegundos desdeépoca (1970-01-01 00:00:00 GMT)

CualPHP también soporta excepto en segundos, por lo que lo siguiente debería funcionar en php:

<code>date('choose your format', javaMilliseconds / 1000);
</code>
como Mark Reed dice también date_default_timezone_set ("UTC"); pstanton
1

fecha necesita una marca de tiempo en formato entero. Así que creo que U debería quitar 3 últimos números. Si no usas la división porque devolverá el número flotante.

Preguntas relacionadas