Recursos de timestamp

Referência de funções de carimbo de data/hora SQL

Referência de funções SQL Timestamp

Referência rápida para operações de carimbo de data/hora em sistemas de banco de dados populares.

Carimbo de data/hora atual

Banco de dadosCarimbo de data/hora atual (UTC)Carimbo de data/hora atual (local)
MySQLAGORA(), UTC_TIMESTAMP()AGORA(), LOCALTIMESTAMP()
PostgreSQLAGORA(), CURRENT_TIMESTAMPAGORA(), CURRENT_TIMESTAMP
SQLitedatetime('agora')datetime('agora', 'hora local')
Servidor SQLGETUTCDATE()GETDATE(), SYSDATETIME()
OráculoSYSTIMESTAMP, SYS_EXTRACT_UTC(SYSTIMESTAMP)SYSTIMESTAMP

Operações de carimbo de data/hora Unix

Obtenha o carimbo de data/hora Unix atual

Banco de dadosCódigo
MySQLUNIX_TIMESTAMP()
PostgreSQLEXTRATO(ÉPOCA DE CURRENT_TIMESTAMP)
SQLitestrftime('%s', 'agora')
Servidor SQLDATEDIFF(s, '1970-01-01', GETUTCDATE())
Oráculo(SYSTIMESTAMP - TO_TIMESTAMP('1970-01-01', 'AAAA-MM-DD')) * 86400

Converter carimbo de data/hora Unix em data

Banco de dadosCódigo
MySQLFROM_UNIXTIME(1704067200)
PostgreSQLTO_TIMESTAMP(1704067200)
SQLitedatetime(1704067200, 'unixepoch')
Servidor SQLDATEADD(s, 1704067200, '1970-01-01')
OráculoTO_DATE('1970-01-01', 'AAAA-MM-DD') + (1704067200/86400)

Converter data em carimbo de data/hora Unix

Banco de dadosCódigo
MySQLUNIX_TIMESTAMP('2024-01-01 00:00:00')
PostgreSQLEXTRATO(ÉPOCA DE '2024-01-01 00:00:00'::timestamp)
SQLitestrftime('%s', '2024-01-01 00:00:00')
Servidor SQLDATEDIFF(s, '1970-01-01', '2024-01-01 00:00:00')
OráculoTO_CHAR('2024-01-01 00:00:00', 'J') - TO_CHAR(DATA '1970-01-01', 'J')) * 86400

Formatação de data

Formatos de data comuns

Banco de dadosISO 8601Formato dos EUAFormato UE
MySQLDATE_FORMAT(NOW(), '%Y-%m-%dT%H:%i:%s')DATE_FORMAT(AGORA(), '%m/%d/%Y')DATE_FORMAT(AGORA(), '%d/%m/%Y')
PostgreSQLTO_CHAR(NOW(), 'AAAA-MM-DD"T"HH24:MI:SS')TO_CHAR(AGORA(), 'MM/DD/AAAA')TO_CHAR(AGORA(), 'DD/MM/AAAA')
SQLitedatetime('agora', 'iso8601')--
Servidor SQLFORMAT(GETUTCDATE(), 'aaaa-MM-ddTHH:mm:ss')FORMAT(GETDATE(), 'MM/dd/aaaa')FORMAT(GETDATE(), 'dd/MM/yyyy')
OráculoTO_CHAR(SYSTIMESTAMP, 'AAAA-MM-DD"T"HH24:MI:SS')TO_CHAR(SYSDATE, 'MM/DD/AAAA')TO_CHAR(SYSDATE, 'DD/MM/AAAA')

Operações de fuso horário

Obtenha o fuso horário atual

Banco de dadosCódigo
MySQLTIMEZONE_NAME, @@time_zone
PostgreSQLconfiguração_atual('fuso horário')
SQLiteN/A (sem suporte de fuso horário)
Servidor SQLGETDATE(), DATENAME(TIMEZONE, SYSDATETIMEOFFSET())
OráculoSESSIONTIMEZONE, DBTIMEZONE

Converter fuso horário| Banco de dados | Código |

|----------|------| | MySQL | CONVERT_TZ('2024-01-01 12:00:00', 'UTC', 'América/Nova_Iorque') | | PostgreSQL | '2024-01-01 12:00:00 UTC'::timestamptz NO FUSO HORÁRIO 'América/Nova_Iorque' | | SQLite | N/A | | Servidor SQL | GETDATE() AT TIME ZONE 'UTC' AT TIME ZONE 'Eastern Standard Time' | | Oráculo | FROM_TZ(TIMESTAMP '2024-01-01 12:00:00', 'UTC') NO FUSO HORÁRIO 'América/Nova_Iorque' |

Aritmética de carimbo de data/hora

Adicionar/Subtrair Tempo

Banco de dadosAdicionar 1 diaSubtraia 1 hora
MySQLDATE_ADD(AGORA(), INTERVALO 1 DIA)DATE_SUB(AGORA(), INTERVALO 1 HORA)
PostgreSQLAGORA() + INTERVAL '1 dia'AGORA() - INTERVALO '1 hora'
SQLitedatetime('agora', '+1 dia')datetime('agora', '-1 hora')
Servidor SQLDATEADD(dia, 1, GETDATE())DATEADD(hora, -1, GETDATE())
OráculoSYSDATE + 1SYSDATE - (1/24)

Calcular diferença

Banco de dadosDias entre
MySQLDATEDIFF('2024-01-15', '2024-01-01')
PostgreSQL'2024-01-15'::data - '2024-01-01'::data
SQLitedia de julho('2024-01-15') - dia de julho('2024-01-01')
Servidor SQLDATEDIFF(dia, '2024-01-01', '2024-01-15')
OráculoTO_DATE('2024-01-15') - TO_DATE('2024-01-01')

Melhores práticas

1. Armazene carimbos de data e hora em UTC

Sempre armazene carimbos de data/hora no formato UTC e converta para a hora local somente ao exibi-los aos usuários.

-- Good: Store in UTC
CREATE TABLE events (
    id INT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Better: Explicit UTC
CREATE TABLE events (
    id INT,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);

2. Use tipos de dados apropriados

Caso de usoTipo recomendado
Armazenamento UTCTIMESTAMP COM FUSO HORÁRIO
Apenas hora localTIMESTAMP SEM FUSO HORÁRIO
Carimbo de data/hora UnixBIGINT (para portabilidade)
Somente dataDATA

3. Lidar adequadamente com as conversões de fuso horário

-- PostgreSQL example
SELECT
    created_at AT TIME ZONE 'UTC' AS utc_time,
    created_at AT TIME ZONE 'America/New_York' AS ny_time,
    created_at AT TIME ZONE 'Asia/Shanghai' AS shanghai_time
FROM events;

Ferramentas relacionadas