Bagaimana cara mengubah timestamp ke datetime di MySQL?

133

Bagaimana cara mengonversi 1300464000ke 2011-03-18 16:00:00dalam MySQL?

kompilasi-fan
sumber
2
Silakan cari pertanyaan / jawaban yang ada sebelum Anda memposting pertanyaan baru - topik ini telah dibahas secara rinci.
John Parker
2
Sudahkah Anda melihat dokumentasi? Semuanya ada di sana: dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html
Felix Kling

Jawaban:

200

Gunakan FROM_UNIXTIME()fungsi di MySQL

Ingat bahwa jika Anda menggunakan kerangka kerja yang menyimpannya dalam milidetik (misalnya cap waktu Java) Anda harus membaginya dengan 1000 untuk mendapatkan waktu Unix yang tepat dalam hitungan detik.

Richard Tuin
sumber
1
SELECT from_unixtime( TIMESTAMP( "2011-12-01", "22:01:23.048" ) )tidak bekerja Mengapa? menggunakan v5.6
Janus Troelsen
3
@JanusTroelsen SELECT from_unixtime( unix_timestamp(TIMESTAMP( "2011-12-01", "22:01:23.048" ) ) )bekerja. TIMESTAMP()tidak mengembalikan nilai integer.
cnvzmxcvmcx
4
Hanya karena saya sudah melakukan ini dan bingung pada output: MySQL menyimpan waktu Unix dalam hitungan detik, sedangkan banyak kerangka kerja lain menyimpannya dalam milidetik (mis. Stempel waktu Java). Jadi ingatlah untuk membagi dengan 1000 jika Anda menggunakan fungsi ini pada data yang berasal dari suatu tempat yang menggunakan millis untuk waktu Unix.
Chris Thompson
64
DATE_FORMAT(FROM_UNIXTIME(`orderdate`), '%Y-%m-%d %H:%i:%s') as "Date" FROM `orders`

Ini adalah solusi akhir jika tanggal yang diberikan dalam format seperti 1300464000

Kingshuk Deb
sumber
3
Terima kasih untuk ini. Untuk memasukkan waktu: DATE_FORMAT(FROM_UNIXTIME(`orderdate`), '%d-%m-%Y %H:%i:%s') as "Date" FROM `orders`
Pengembang Web JNP
Saya cukup yakin DATE_FORMAT (FROM_UNIXTIME ( orderdate), '% Y-% m-% d') sebagai "Tanggal" FROM ordersakan menjadi solusi akhir: D
Kyle
14

Untuk menjawab komentar Janus Troelsen

Gunakan UNIX_TIMESTAMP sebagai ganti TIMESTAMP

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

Fungsi TIMESTAMP mengembalikan Tanggal atau DateTime dan bukan cap waktu, sedangkan UNIX_TIMESTAMP mengembalikan cap waktu unix

ksvendsen
sumber
Tampaknya jelas untuk membandingkan waktu unix dari waktu unix. Saya menggunakan SELECT (CAST (DATE_FORMAT (from_unixtime (UNIX_TIMESTAMP (CURRENT_TIMESTAMP)), '% Y-% m-% d') sebagai DATE) <CAST ('2019-05-02' AS DATE)); untuk membandingkan tanggal, saya mengganti 2019-05 * 02 objek datetime yang diformat di php. Terima kasih.
Mantisse
1
Tolong jangan jawab cara ini untuk pertanyaan yang berbeda dari yang asli.
Paweł Stankowski
Ini tidak menjawab pertanyaan asli dengan cara apa pun
Nico Haase
7

Kamu bisa memakai

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

Untuk deskripsi detail tentang

  1. from_unixtime ()
  2. unix_timestamp ()
Dilraj Singh
sumber
Saya akan menggunakan format ini untuk waktu militer "% Y-% m-% d% H% i% s"
tanner burton
3

SELECT from_unixtime( UNIX_TIMESTAMP(fild_with_timestamp) ) from "your_table"
Ini bekerja untuk saya

Leo
sumber