Converta o carimbo de data e hora do Unix em data legível por humanos usando o MySQL

222

Existe uma função MySQL que pode ser usada para converter um registro de data e hora do Unix em uma data legível por humanos? Eu tenho um campo em que salvo os tempos do Unix e agora quero adicionar outro campo para datas legíveis por humanos.

King Julien
fonte
1
Funções de data e hora no manual mySQL
Pekka
Possível duplicata de Como converter timestamp em datetime no MySQL?
Álvaro González

Respostas:

108

O que está faltando nas outras respostas (no momento em que escrevo) e não é diretamente óbvio é que é from_unixtimepossível usar um segundo parâmetro para especificar o formato da seguinte forma:

SELECT
  from_unixtime(timestamp, '%Y %D %M %H:%i:%s')
FROM 
  your_table
Do utilizador
fonte
20
Problema muito pequeno, mas% h é horas no formato de 12 horas, que requer% p para integridade (AM / PM). Ou% H fornece horas no formato de 24 horas.
Tlum 30/05
19

Precisa de um timestamp unix em um fuso horário específico?

Aqui está uma lista, se você tiver acesso rápido ao mysql cli:

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

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

Substitua 'MST'pelo fuso horário desejado. Eu moro no Arizona, portanto, a conversão de UTC para MST.

elbowlobstercowstand
fonte
7

Por que se preocupar em salvar o campo como legível? Só nósAS

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

EDIT: Desculpe, nós armazenamos tudo em milissegundos, não segundos. Corrigido.

josh.trow
fonte
4

Você pode usar a função DATE_FORMAT. Aqui está uma página com exemplos e os padrões que você pode usar para selecionar diferentes componentes de data.

Briguy37
fonte
1

Maneira fácil e simples:

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

Akash gupta
fonte
1

Desde que eu achei essa pergunta inconsciente, que o mysql sempre armazena tempo nos campos de registro de data e hora no UTC, mas será exibido (por exemplo, phpmyadmin) no fuso horário local, gostaria de adicionar minhas descobertas.

Eu tenho um campo last_modified atualizado automaticamente, definido como:

`last_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

Olhando para ele com phpmyadmin, parece que está no horário local, internamente é 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`

Em qualquer constelação, UNIX_TIMESTAMP e 'as UTC' são sempre exibidos no horário UTC.

Execute isso duas vezes, primeiro sem definir o time_zone.

Gunnar Bernstein
fonte