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


222

Czy istnieje funkcja MySQL, której można użyć do przekształcenia uniksowego znacznika czasu w datę czytelną dla człowieka? Mam jedno pole, w którym zapisuję czasy uniksowe, a teraz chcę dodać kolejne pole dla dat czytelnych dla ludzi.


1
Funkcje daty i godziny w podręczniku mySQL
Pekka

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

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.


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.


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.


1

Łatwy i prosty sposób:

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


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.