2012-05-03 29 views
6

¿cómo puedo convertir una marca de tiempo de Java como esta 1335997853142 a un formato que php puede leer? 1335997853142 debe ser 02 May 2012 22:30:53.Cómo convertir la marca de tiempo java a php timestamp?

Pero lo que cada vez que intento recibo errores o PHP dice ayuda 1970-01-01 01:00:00 o 2038-01-19 04:14:07

PLS !!! ¡Estoy buscando más de 1,5 horas para una solución!

+1

Use 'java.util.Calendar'. Eso es todo lo que obtienes por esta gran pregunta. – Torious

+1

La marca de tiempo de Java es milisegundos desde el tiempo de Linux, php es segundos desde el tiempo de Linux. Divida el tiempo de Java por 1000 para obtener el tiempo php. – Jordonias

+0

@Torious: no quiero usar java - estoy convirtiendo 1220 valores de un archivo xml con php a mysql – user1373728

Respuesta

6

no es una marca de tiempo de Java, es milisegundos desde epoch (1970-01-01 00:00:00 GMT)

Qué php supports too excepto en segundos para que el siguiente debe funcionar en php:

date('choose your format', javaMilliseconds/1000); 
+0

, ya que Mark Reed dice también date_default_timezone_set ("UTC"); – pstanton

0

Es una marca de tiempo en microtime

Use

$time = date("whatever you need", $javatime/1000); 
+0

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: date() espera que el parámetro 2 sea largo wtf is wrong?!? – user1373728

1

Java le da una marca de tiempo en milisegundos. PHP utiliza Unix segundos, por lo que se divide por 1000:

print(date("r", 1335997853142/1000) 
1

La marca de tiempo que se tiene es en milisegundos cuando debería ser en cuestión de segundos

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

salida

02 May 2012 22:30:53 
+0

esto da para todos los valores en la matriz: 25 de enero de 1970 20:31:23 – user1373728

+0

Me faltaban algunos puntos y comas, solucionado ahora – Jordonias

+0

¿Estás seguro de que estás recuperando correctamente las entradas de xml? – Jordonias

7

marcas de tiempo de PHP son segundos, no milisegundos.

echo gmdate("d M Y H:i:s",1335997853); 

que da salida a 02 May 2012 22:30:53.

+0

maldita sea! vale, ahora funciona - ¡con todas tus soluciones! ¡¡Gracias!! problema fue: la cadena tiene espacios (¡no sé por qué!). después de un ajuste() todo funcionó. lo siento chicos pero gracias a todos! – user1373728

1

Fecha/Hora: Abril/08/2014 12:17:42 pm GMT

Java marca de tiempo: 1396959462222

PHP fecha y hora: 1396959462

Dividiendo entre 1000 no da exactamente la respuesta correcta porque dará un valor doble o flotante, es decir 1396959462.222 que no es lo que queremos. Necesitamos un entero aquí como 1396959462. manera Así correcta de Java para convertir fecha y hora de PHP marca de tiempo sería mediante el uso de intval():

$php_timestamp = intval($java_timestamp/1000); 

En un ejemplo real, en una de mis aplicaciones Android Dónde envío marca de tiempo para Java un servidor PHP, lo hago como se menciona arriba. También, para la buena práctica de seguridad, agrego un preg_replace() para asegurarse de que si alguien añade código de truco en este campo, se retira:

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

fecha necesita una marca de tiempo en formato de número entero. Así que creo que U debería eliminar 3 últimos números. No use la división porque devolverá el número de flotación.

Cuestiones relacionadas