Convertir l'horodatage Unix en une date lisible par l'homme à l'aide de MySQL

Réponses:

108

Ce qui manque dans les autres réponses (au moment de la rédaction de ce document) et qui n'est pas directement évident, c'est qu'il from_unixtimepeut prendre un deuxième paramètre pour spécifier le format comme suit:

SELECT
  from_unixtime(timestamp, '%Y %D %M %H:%i:%s')
FROM 
  your_table
Utilisateur
la source
20
Problème très mineur, mais% h correspond aux heures au format 12 heures, ce qui nécessite alors% p pour être complet (AM / PM). Ou% H donne des heures au format 24 heures.
tlum
19

Besoin d'un horodatage Unix dans un fuseau horaire spécifique?

Voici une ligne si vous avez un accès rapide au cli mysql:

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

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

Remplacez 'MST'par le fuseau horaire souhaité. J'habite en Arizona 🌵 ainsi la conversion de l'UTC en MST.

coude
la source
7

Pourquoi prendre la peine de sauvegarder le champ comme lisible? Seulement nousAS

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

EDIT: Désolé, nous stockons tout en millisecondes et non en secondes. A corrigé.

josh.trow
la source
4

Vous pouvez utiliser la fonction DATE_FORMAT. Voici une page avec des exemples et les modèles que vous pouvez utiliser pour sélectionner différents composants de date.

Briguy37
la source
1

Manière facile et simple:

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

Akash gupta
la source
1

Depuis que j'ai trouvé que cette question n'était pas au courant, que mysql stocke toujours le temps dans les champs d'horodatage en UTC mais s'affichera (par exemple phpmyadmin) dans le fuseau horaire local, je voudrais ajouter mes résultats.

J'ai un champ last_modified mis à jour automatiquement, défini comme:

`last_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

En le regardant avec phpmyadmin, on dirait qu'il est en heure locale, en interne c'est 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`

Dans toute constellation, UNIX_TIMESTAMP et 'as UTC' sont toujours affichés en temps UTC.

Exécutez-le deux fois, d'abord sans définir la zone de temps.

Gunnar Bernstein
la source