Konwertuj uniksowy znacznik czasu na datę czytelną dla ludzi za pomocą MySQL

Odpowiedzi:

108

Czego brakuje w innych odpowiedziach (jak na ten tekst) i nie jest bezpośrednio oczywiste, że from_unixtimemożna wziąć drugi parametr, aby określić format tak:

SELECT
  from_unixtime(timestamp, '%Y %D %M %H:%i:%s')
FROM 
  your_table
Użytkownik
źródło
20
Bardzo drobny problem, ale% h to godziny w formacie 12-godzinnym, które następnie wymagają% p do kompletności (AM / PM). Lub% H podaje godziny w formacie 24-godzinnym.
tlum
19

Potrzebujesz uniksowego znacznika czasu w określonej strefie czasowej?

Oto jeden linijka, jeśli masz szybki dostęp do mysql cli:

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

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

Zamień 'MST'na żądaną strefę czasową. Mieszkam w Arizonie 🌵 więc konwersja z UTC do MST.

elbowlobstercowstand
źródło
7

Po co zawracać sobie głowę zapisywaniem pola jako czytelnego? Tylko myAS

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

EDYCJA: Przepraszamy, przechowujemy wszystko w milisekundach, a nie sekundach. Naprawione.

josh.trow
źródło
4

Możesz użyć funkcji DATE_FORMAT. Oto strona z przykładami i wzorami, których możesz użyć, aby wybrać różne składniki daty.

Briguy37
źródło
1

Łatwy i prosty sposób:

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

Akash gupta
źródło
1

Ponieważ nie zauważyłem tego pytania, mysql zawsze przechowuje czas w polach znaczników czasu w UTC, ale wyświetla (np. Phpmyadmin) w lokalnej strefie czasowej, chciałbym dodać moje ustalenia.

Mam automatycznie aktualizowane pole last_modified, zdefiniowane jako:

`last_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

Patrząc na to z phpmyadminem, wygląda na to, że jest w czasie lokalnym, wewnętrznie jest to 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`

W dowolnej konstelacji UNIX_TIMESTAMP i „as UTC” są zawsze wyświetlane w czasie UTC.

Uruchom to dwukrotnie, najpierw bez ustawiania strefy czasowej.

Gunnar Bernstein
źródło