Konvertieren Sie den Unix-Zeitstempel mit MySQL in ein lesbares Datum

222

Gibt es eine MySQL-Funktion, mit der ein Unix-Zeitstempel in ein lesbares Datum konvertiert werden kann? Ich habe ein Feld, in dem ich Unix-Zeiten speichere, und jetzt möchte ich ein weiteres Feld für von Menschen lesbare Daten hinzufügen.

König Julien
quelle
1
Datums- und Uhrzeitfunktionen im mySQL-Handbuch
Pekka
Mögliches Duplikat von Wie konvertiere ich einen Zeitstempel in datetime in MySQL?
Álvaro González

Antworten:

108

Was in den anderen Antworten (zum Zeitpunkt dieses Schreibens) fehlt und nicht direkt offensichtlich ist, from_unixtimeist, dass ein zweiter Parameter erforderlich sein kann, um das Format wie folgt anzugeben:

SELECT
  from_unixtime(timestamp, '%Y %D %M %H:%i:%s')
FROM 
  your_table
Benutzer
quelle
20
Sehr kleines Problem, aber% h sind Stunden im 12-Stunden-Format, für die der Vollständigkeit halber% p erforderlich ist (AM / PM). Oder% H gibt Stunden im 24-Stunden-Format an.
Bis
19

Benötigen Sie einen Unix-Zeitstempel in einer bestimmten Zeitzone?

Hier ist ein Einzeiler, wenn Sie schnellen Zugriff auf die MySQL-CLI haben:

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

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

Ersetzen Sie 'MST'durch Ihre gewünschte Zeitzone. Ich lebe in Arizona - also die Umstellung von UTC auf MST.

Ellenbogenlobstercowstand
quelle
7

Warum das Feld als lesbar speichern? Nur wirAS

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

EDIT: Sorry, wir speichern alles in Millisekunden, nicht in Sekunden. Behoben.

josh.trow
quelle
4

Sie können die Funktion DATE_FORMAT verwenden. Hier ist eine Seite mit Beispielen und den Mustern, mit denen Sie verschiedene Datumskomponenten auswählen können.

Briguy37
quelle
1

Einfacher und einfacher Weg:

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

Akash Gupta
quelle
1

Da mir diese Frage nicht bewusst war, dass MySQL immer Zeit in Zeitstempelfeldern in UTC speichert, aber (z. B. phpmyadmin) in der lokalen Zeitzone angezeigt wird, möchte ich meine Ergebnisse hinzufügen.

Ich habe ein automatisch aktualisiertes Feld last_modified, definiert als:

`last_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

Wenn man es mit phpmyadmin betrachtet, sieht es so aus, als wäre es in der Ortszeit, intern ist es 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`

In jeder Konstellation werden UNIX_TIMESTAMP und 'as UTC' immer in UTC-Zeit angezeigt.

Führen Sie dies zweimal aus, ohne die Zeitzone festzulegen.

Gunnar Bernstein
quelle