O que é o Epoch ou Timestamp Unix?
O timestamp Unix, também conhecido como tempo Epoch ou tempo POSIX, é um sistema para descrever um momento no tempo como o número de segundos decorridos desde a época Unix (00:00:00 UTC, 1º de janeiro de 1970), excluindo segundos bissextos. Ele serve como um padrão universal para a representação do tempo na computação, permitindo cálculos, comparações e sincronizações precisas baseadas no tempo entre sistemas e aplicativos.
Os timestamps Unix são amplamente utilizados em bancos de dados, sistemas de registro, APIs e sistemas distribuídos para acompanhar eventos, agendar tarefas e gerenciar operações sensíveis ao tempo. No entanto, o tempo Unix não é uma representação verdadeira do UTC devido à exclusão dos segundos bissextos. Muitos sistemas legados armazenam o tempo Unix como um inteiro de 32 bits assinado, o qual irá estourar em 19 de janeiro de 2038, às 03:14:08 UTC, levando ao problema do ano 2038.
O que acontece em 19 de janeiro de 2038?
O problema do ano 2038 (Y2038, Epochalypse ou Unix Y2K) é um problema crítico para sistemas que usam um inteiro de 32 bits assinado para armazenar o tempo Unix. Esses sistemas não podem representar tempos posteriores às 03:14:07 UTC, 19 de janeiro de 2038, pois o valor máximo (2.147.483.647 segundos) será excedido. Quando incrementado, o timestamp irá estourar, se tornando um número negativo e fazendo com que os sistemas o interpretem erroneamente como 13 de dezembro de 1901.
Esse estouro de inteiro pode interromper sistemas críticos em áreas como transações financeiras, aviação, saúde e infra - estrutura, onde o registro preciso do tempo é essencial. Para mitigar isso, os sistemas modernos estão migrando para inteiros de 64 bits, os quais podem representar o tempo por bilhões de anos no futuro. Os desenvolvedores também são encorajados a atualizar os sistemas legados e adotar bibliotecas robustas de manipulação de tempo para evitar falhas relacionadas ao Y2038.
Como obter o tempo Epoch atual em diferentes linguagens de programação?
PHP
$epoch = time();
Javascript
var epoch = Math.floor(Date.now() / 1000);
Typescript
let epoch: number = Math.floor(Date.now() / 1000);
C++
#include <chrono>
auto epoch = std::chrono::duration_cast<std::chrono::seconds>(std::chrono::system_clock::now().time_since_epoch()).count();
Java
long epoch = System.currentTimeMillis() / 1000;
Rust
use std::time::{SystemTime, UNIX_EPOCH};
let epoch = SystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_secs();
Go
import "time"
epoch := time.Now().Unix()
Swift
import Foundation
let epoch = Int(Date().timeIntervalSince1970)
Bash Shell
epoch=$(date +%s)
C#
long epoch = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
MySQL
SELECT UNIX_TIMESTAMP(NOW());
MATLAB
epoch = posixtime(datetime('now'));
VBA
Dim epoch As Long
epoch = DateDiff("s", "1/1/1970", Now())