O que é o horário conhecido como “epoch”?
Epoch Unix (Unix time, POSIX time ou timestamp) é o número de segundos que se passaram desde 01 de janeiro de 1970 (meia-noite UTC/GMT), não contando os segundos bissextos (em ISO 8601: 1970-01-01T00:00:00Z). Literalmente falando, o epoch é a estaca 0 no horário do Unix (meia-noite 1970/01/01), mas “epoch” é frequentemente utilizado como sinônimo de “Unix time”. Muitos sistemas Unix armazenam o epoch como um inteiro assinado de 32 bits, o que pode causar problemas em 19 janeiro de 2038 (conhecido como o problema do ano 2038 ou Y2038).
Abaixo estou colocando uma tabela com exemplos:
Horário legível | Segundos |
1 minuto | 60 segundos |
1 hora | 3600 segundos |
1 dia | 86400 segundos |
1 semana | 604800 segundos |
1 mês (30.44 dias) | 2629743 segundos |
1 ano (365.24 dias) | 31556926 segundos |
Todas as linguagens de programação oferecem uma forma de realizar a transformação timestamp <> horário legível. Abaixo segue alguns dos exemplos que eu mais utilizo:
Pegando o time Timestamp: | |
Perl | time |
PHP | time() |
Unix/Linux Shell | date +%s |
Python | import time first, then time.time() |
Java | long epoch = System.currentTimeMillis()/1000; |
MySQL | SELECT unix_timestamp(now()) |
PostgreSQL | SELECT extract(epoch FROM now()); |
Convetendo de horário legível para Timestamp | |
Unix/Linux Shell | date +%s -ud”Jan 1, 1980 00:00:01″ |
PHP | mktime(hour, minute, second, month, day, year) |
Python | import time first, then int(time.mktime(time.strptime(‘2000-01-01 12:34:00’, ‘%Y-%m-%d %H:%M:%S’))) – time.timezone |
Java | long epoch = new java.text.SimpleDateFormat (“dd/MM/yyyy HH:mm:ss”).parse(“01/01/1970 01:00:00”); |
PostgreSQL | SELECT extract(epoch FROM date(‘2010-10-27 14:42’)); |
MySQL | SELECT unix_timestamp(time)Time format: YYYY-MM-DD HH:MM:SS |
Convertendo de Timestamp para horário legível | |
Unix/Linux Shell | date -ud @1190000000 |
PHP | date(output format, epoch); |
Python | import time first, then time.strftime(“%a, %d %b %Y %H:%M:%S +0000”, time.localtime(epoch)) |
Java | String date = new java.text.SimpleDateFormat(“dd/MM/yyyy HH:mm:ss”).format(new java.util.Date (epoch*1000)); |
MySQL | from_unixtime(epoch, optional output format) |
PostgreSQL | PostgreSQL version 8.1 and higher: SELECT to_timestamp(epoch); Older versions: SELECT TIMESTAMP WITH TIME ZONE ‘epoch’ + epoch * INTERVAL ‘1 second’; |
Bom, aquele monte de números juntos, onde cada segundo passado ele aumenta, que parece um bicho de sete cabeças, não é nada além do Timestamp.