Ubah cap waktu Unix menjadi tanggal yang dapat dibaca manusia menggunakan MySQL

222

Apakah ada fungsi MySQL yang dapat digunakan untuk mengubah cap waktu Unix menjadi tanggal yang dapat dibaca manusia? Saya memiliki satu bidang tempat saya menyimpan waktu Unix dan sekarang saya ingin menambahkan bidang lain untuk tanggal yang dapat dibaca manusia.

Raja Julien
sumber
1
Fungsi tanggal dan waktu dalam manual mySQL
Pekka
Kemungkinan duplikat dari Bagaimana mengonversi timestamp ke datetime di MySQL?
Álvaro González

Jawaban:

108

Apa yang hilang dari jawaban lain (pada tulisan ini) dan tidak langsung jelas adalah bahwa from_unixtimedapat mengambil parameter kedua untuk menentukan format seperti:

SELECT
  from_unixtime(timestamp, '%Y %D %M %H:%i:%s')
FROM 
  your_table
Pengguna
sumber
20
Masalah yang sangat kecil, tetapi% h adalah jam dalam format 12 jam, yang kemudian membutuhkan% p untuk kelengkapan (AM / PM). Atau% H memberikan jam dalam format 24 jam.
tlum
19

Perlu cap waktu unix di zona waktu tertentu?

Berikut ini satu liner jika Anda memiliki akses cepat ke klien mysql:

mysql> select convert_tz(from_unixtime(1467095851), 'UTC', 'MST') as 'local time';

+---------------------+
| local time          |
+---------------------+
| 2016-06-27 23:37:31 |
+---------------------+

Ganti 'MST'dengan zona waktu yang Anda inginkan. Saya tinggal di Arizona 🌵 dengan demikian konversi dari UTC ke MST.

elbowlobstercowstand
sumber
7

Mengapa repot-repot menyimpan bidang sebagai dapat dibaca? Hanya kitaAS

SELECT theTimeStamp, FROM_UNIXTIME(theTimeStamp) AS readableDate
               FROM theTable
               WHERE theTable.theField = theValue;

EDIT: Maaf, kami menyimpan semuanya dalam milidetik bukan dalam hitungan detik. Memperbaikinya.

josh.trow
sumber
4

Anda dapat menggunakan fungsi DATE_FORMAT. Inilah halaman dengan contoh, dan pola yang dapat Anda gunakan untuk memilih komponen tanggal yang berbeda.

Briguy37
sumber
1

Cara mudah dan sederhana:

select from_unixtime(column_name, '%Y-%m-%d') from table_name

Akash gupta
sumber
1

Karena saya menemukan pertanyaan ini tidak disadari, bahwa mysql selalu menyimpan waktu di bidang timestamp di UTC tetapi akan ditampilkan (mis. Phpmyadmin) di zona waktu lokal saya ingin menambahkan temuan saya.

Saya memiliki bidang last_modified yang diperbarui secara otomatis, didefinisikan sebagai:

`last_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

Melihatnya dengan phpmyadmin, sepertinya itu adalah waktu setempat, secara internal itu adalah UTC

SET time_zone = '+04:00'; // or '+00:00' to display dates in UTC or 'UTC' if time zones are installed.
SELECT last_modified, UNIX_TIMESTAMP(last_modified), from_unixtime(UNIX_TIMESTAMP(last_modified), '%Y-%c-%d %H:%i:%s'), CONVERT_TZ(last_modified,@@session.time_zone,'+00:00') as UTC FROM `table_name`

Di sembarang konstelasi, UNIX_TIMESTAMP dan 'sebagai UTC' selalu ditampilkan dalam waktu UTC.

Jalankan ini dua kali, pertama tanpa mengatur time_zone.

Gunnar Bernstein
sumber