Convierta la marca de tiempo de Unix en una fecha legible para humanos con MySQL

Respuestas:

108

Lo que falta en las otras respuestas (a partir de este escrito) y no es directamente obvio es que from_unixtimepuede tomar un segundo parámetro para especificar el formato de esta manera:

SELECT
  from_unixtime(timestamp, '%Y %D %M %H:%i:%s')
FROM 
  your_table
Usuario
fuente
20
Problema muy leve, pero% h es horas en formato de 12 horas, que luego requiere% p para completar (AM / PM). O% H da horas en formato de 24 horas.
tlum
19

¿Necesita una marca de tiempo de Unix en una zona horaria específica?

Aquí hay una línea si tiene acceso rápido al mysql cli:

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

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

Reemplace 'MST'con su zona horaria deseada. Vivo en Arizona 🌵 por lo tanto, la conversión de UTC a MST.

pie de codo
fuente
7

¿Por qué molestarse en guardar el campo como legible? Solo nosotrosAS

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

EDITAR: Lo sentimos, almacenamos todo en milisegundos, no segundos. Arreglado.

josh.trow
fuente
4

Puede usar la función DATE_FORMAT. Aquí hay una página con ejemplos y los patrones que puede usar para seleccionar diferentes componentes de fecha.

Briguy37
fuente
1

Manera fácil y simple:

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

Akash gupta
fuente
1

Como descubrí que esta pregunta no es consciente, mysql siempre almacena la hora en los campos de marca de tiempo en UTC pero se mostrará (por ejemplo, phpmyadmin) en la zona horaria local. Me gustaría agregar mis hallazgos.

Tengo un campo last_modified actualizado automáticamente, definido como:

`last_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

Mirándolo con phpmyadmin, parece que es en hora local, internamente 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`

En cualquier constelación, UNIX_TIMESTAMP y 'como UTC' siempre se muestran en hora UTC.

Ejecute esto dos veces, primero sin configurar la zona horaria.

Gunnar Bernstein
fuente