Pytanie w sprawie java, timestamp, php – Jak przekonwertować znacznik czasu java na znacznik czasu php?

7

jak mogę przekonwertować znacznik czasu Java, taki jak ten1335997853142 do formatu, który php może odczytać?1335997853142 powinno być02 May 2012 22:30:53.

Ale co próbuję uzyskać błędy lub mówi PHP1970-01-01 01:00:00 lub2038-01-19 04:14:07

Pomoc PLS !!! Szukam ponad 1,5 godziny na rozwiązanie!

Posługiwać sięjava.util.Calendar. To wszystko, co dostajesz za to wspaniałe pytanie. Torious
@Torious: nie chcę używać Java - konwertuję 1220 wartości z pliku XML z php na mysql user1373728
Znacznik czasu Java to milisekundy od czasu Linuksa, php to sekundy od czasu Linuksa. Podziel czas java na 1000, aby uzyskać czas php. Jordonias

Twoja odpowiedź

8   odpowiedzi
6

epoka (1970-01-01 00:00:00 GMT)

Któryobsługuje również php z wyjątkiem sekund, aby w php działało:

<code>date('choose your format', javaMilliseconds / 1000);
</code>
jak mówi Mark Reed, także date_default_timezone_set („UTC”); pstanton
0

Posługiwać się

<code>$time = date("whatever you need", $javatime / 1000);
</code>
użyłem tego: date ('Y-m-d H: i: s', $ values ​​['date'] / 1000); // 1970-01-25 21:31:23 to: date ('Ymd H: i: s', (int) $ values ​​['date'] / 1000) // 1970-01-25 21:31:23 to: date ('U = Ymd H: i: s', (int) $ values ​​['date']) // 2038-01-19 04:14:07 to: date ('U = Ymd H: i: s ', (int) $ values ​​[' date ']) // Ostrzeżenie: date () oczekuje, że parametr 2 będzie długi wtf jest nieprawidłowy?!? user1373728
1

Znacznik czasu Java: 1396959462222

Znacznik czasu PHP: 1396959462

Dzielenie przez 1000 nie daje prawidłowej odpowiedzi, ponieważ daje wartość podwójną lub zmienną, tj. 1396959462.222, co nie jest tym, czego chcemy. Potrzebujemy tutaj liczby całkowitej jak 1396959462. Tak więc poprawny sposób konwersji znacznika czasu Java na znacznik czasu PHP to użycie intval ():

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

W prawdziwym przykładzie, w jednej z moich aplikacji na Androida, gdzie wysyłam znacznik czasu Java na serwer PHP, robię to jak wspomniano powyżej. Ponadto, dla dobrej praktyki bezpieczeństwa, dodaję preg_replace (), aby upewnić się, że ktoś dodał kod hackowania w tym polu, jest usuwany:

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

że U powinien usunąć 3 ostatni numer. Nie używaj podziału, ponieważ zwróci liczbę zmiennoprzecinkową.

8

Znaczniki czasu PHP to sekundy, a nie milisekundy.

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

To wychodzi02 May 2012 22:30:53.

cholera!! ok, teraz działa - ze wszystkimi swoimi rozwiązaniami! dzięki!! Problem polegał na tym, że łańcuch ma spacje (nie wiem dlaczego!). po wykończeniu () wszystko działało. przepraszam chłopaki, ale dziękuję wszystkim! user1373728
1

więc podziel przez 1000:

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

który masz, jest w milisekundach, kiedy powinien być w sekundach

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

Wydajność

<code>02 May 2012 22:30:53
</code>
daje to wszystkie wartości w tablicy: 25 stycznia 1970 20:31:23 user1373728
Czy na pewno poprawnie pobierasz wpisy z pliku XML? Jordonias
Brakowało mi niektórych średników, naprawiłem teraz Jordonias

Powiązane pytania