Jak przekonwertować znacznik czasu na datę i godzinę w MySQL?

137

Jak przekonwertować 1300464000na 2011-03-18 16:00:00w MySQL?

kompilacja-fan
źródło
2
Poszukaj istniejących pytań / odpowiedzi, zanim opublikujesz nowe pytanie - ten temat został już szczegółowo omówiony.
John Parker,
2
Czy już obejrzałeś dokumentację? Wszystko tam jest: dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html
Felix Kling

Odpowiedzi:

205

Użyj FROM_UNIXTIME()funkcji w MySQL

Pamiętaj, że jeśli używasz frameworka, który przechowuje go w milisekundach (na przykład znacznik czasu Javy), musisz podzielić przez 1000, aby uzyskać właściwy czas uniksowy w sekundach.

Richard Tuin
źródło
1
SELECT from_unixtime( TIMESTAMP( "2011-12-01", "22:01:23.048" ) )nie działa. czemu? używając wersji 5.6
Janus Troelsen
3
@JanusTroelsen SELECT from_unixtime( unix_timestamp(TIMESTAMP( "2011-12-01", "22:01:23.048" ) ) )działa. TIMESTAMP()nie zwraca wartości całkowitej.
cnvzmxcvmcx
4
Tylko dlatego, że zrobiłem to i pomyliłem się na wyjściu: MySQL przechowuje czas Unixa w sekundach, podczas gdy wiele innych frameworków przechowuje go w milisekundach (np. Znacznik czasu Javy). Więc pamiętaj, aby podzielić przez 1000, jeśli używasz tej funkcji na danych pochodzących z miejsca, w którym używa się milis dla czasu uniksowego.
Chris Thompson
66
DATE_FORMAT(FROM_UNIXTIME(`orderdate`), '%Y-%m-%d %H:%i:%s') as "Date" FROM `orders`

To najlepsze rozwiązanie, jeśli podana data jest zakodowana w formacie 1300464000

Kingshuk Deb
źródło
3
Dzięki za to. Obejmuje czas: DATE_FORMAT(FROM_UNIXTIME(`orderdate`), '%d-%m-%Y %H:%i:%s') as "Date" FROM `orders`
JNP Web Developer
Jestem prawie pewien, że DATE_FORMAT (FROM_UNIXTIME ( orderdate), '% Y-% m-% d') jako „Data” FROM ordersbędzie ostatecznym rozwiązaniem: D
Kyle
15

Aby odpowiedzieć na komentarz Janusa Troelsena

Użyj UNIX_TIMESTAMP zamiast TIMESTAMP

SELECT from_unixtime( UNIX_TIMESTAMP(  "2011-12-01 22:01:23.048" ) )

Funkcja TIMESTAMP zwraca datę lub datę i godzinę, a nie znacznik czasu, podczas gdy UNIX_TIMESTAMP zwraca unixowy znacznik czasu

ksvendsen
źródło
wydaje się jasne porównanie czasu uniksowego z czasem uniksowym. Używam SELECT (CAST (DATE_FORMAT (from_unixtime (UNIX_TIMESTAMP (CURRENT_TIMESTAMP))), '% Y-% m-% d') jako DATE) <CAST ('2019-05-02' AS DATE)); aby porównać daty, zastępuję 2019-05 * 02 sformatowany obiekt datetime w php. Thnaks.
Mantisse
1
Proszę nie odpowiadać w ten sposób na pytanie inne niż pierwotne.
Paweł Stankowski
To w żaden sposób nie odpowiada na pierwotne pytanie
Nico Haase
8

Możesz użyć

select from_unixtime(1300464000,"%Y-%m-%d %h %i %s") from table;

Aby uzyskać szczegółowy opis na temat

  1. from_unixtime ()
  2. unix_timestamp ()
Dilraj Singh
źródło
Użyłbym tego formatu dla czasu wojskowego „% Y-% m-% d% H% i% s”
tanner burton
3

SELECT from_unixtime( UNIX_TIMESTAMP(fild_with_timestamp) ) from "your_table"
Ta praca dla mnie

Lew
źródło