Recursos de marcas de tiempo

Referencia de funciones de marca de tiempo SQL

Referencia de funciones de marca de tiempo SQL

Referencia rápida para operaciones de marca de tiempo en sistemas de bases de datos populares.

Marca de tiempo actual

Base de datosMarca de tiempo actual (UTC)Marca de tiempo actual (local)
MySQLNOW(), UTC_TIMESTAMP()NOW(), LOCALTIMESTAMP()
PostgreSQLNOW(), CURRENT_TIMESTAMPNOW(), CURRENT_TIMESTAMP
SQLitedatetime('now')datetime('now', 'localtime')
Servidor SQLGETUTCDATE()GETDATE(), SYSDATETIME()
OráculoSYSTIMESTAMP, SYS_EXTRACT_UTC(SYSTIMESTAMP)SYSTIMESTAMP

Operaciones de marca de tiempo de Unix

Obtener la marca de tiempo actual de Unix

Base de datosCódigo
MySQLUNIX_TIMESTAMP()
PostgreSQLEXTRACT(EPOCH FROM CURRENT_TIMESTAMP)
SQLitestrftime('%s', 'now')
Servidor SQLDATEDIFF(s, '1970-01-01', GETUTCDATE())
Oráculo(SYSTIMESTAMP - TO_TIMESTAMP('1970-01-01', 'YYYY-MM-DD')) * 86400

Convertir la marca de tiempo de Unix a la fecha

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

Convertir fecha a marca de tiempo Unix

Base de datosCódigo
MySQLUNIX_TIMESTAMP('2024-01-01 00:00:00')
PostgreSQLEXTRACT(EPOCH FROM '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(DATE '1970-01-01', 'J')) * 86400

Formato de fecha

Formatos de fecha comunes

Base de datosISO 8601Formato estadounidenseFormato UE
MySQLDATE_FORMAT(NOW(), '%Y-%m-%dT%H:%i:%s')DATE_FORMAT(NOW(), '%m/%d/%Y')DATE_FORMAT(NOW(), '%d/%m/%Y')
PostgreSQLTO_CHAR(NOW(), 'YYYY-MM-DD"T"HH24:MI:SS')TO_CHAR(NOW(), 'MM/DD/YYYY')TO_CHAR(NOW(), 'DD/MM/YYYY')
SQLitedatetime('now', 'iso8601')--
Servidor SQLFORMAT(GETUTCDATE(), 'yyyy-MM-ddTHH:mm:ss')FORMAT(GETDATE(), 'MM/dd/yyyy')FORMAT(GETDATE(), 'dd/MM/yyyy')
OráculoTO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD"T"HH24:MI:SS')TO_CHAR(SYSDATE, 'MM/DD/YYYY')TO_CHAR(SYSDATE, 'DD/MM/YYYY')

Operaciones de zona horaria

Obtener zona horaria actual

Base de datosCódigo
MySQLTIMEZONE_NAME, @@time_zone
PostgreSQLcurrent_setting('timezone')
SQLiteN/A (sin soporte de zona horaria)
Servidor SQLGETDATE(), DATENAME(TIMEZONE, SYSDATETIMEOFFSET())
OráculoSESSIONTIMEZONE, DBTIMEZONE

Convertir zona horaria

Base de datosCódigo
MySQLCONVERT_TZ('2024-01-01 12:00:00', 'UTC', 'America/New_York')
PostgreSQL'2024-01-01 12:00:00 UTC'::timestamptz AT TIME ZONE 'America/New_York'
SQLiteN/A
Servidor SQLGETDATE() AT TIME ZONE 'UTC' AT TIME ZONE 'Eastern Standard Time'
OráculoFROM_TZ(TIMESTAMP '2024-01-01 12:00:00', 'UTC') AT TIME ZONE 'America/New_York'

Aritmética de marca de tiempo

Sumar/Restar tiempo

Base de datosAñadir 1 díaRestar 1 hora
MySQLDATE_ADD(NOW(), INTERVAL 1 DAY)DATE_SUB(NOW(), INTERVAL 1 HOUR)
PostgreSQLNOW() + INTERVAL '1 day'NOW() - INTERVAL '1 hour'
SQLitedatetime('now', '+1 day')datetime('now', '-1 hour')
Servidor SQLDATEADD(day, 1, GETDATE())DATEADD(hour, -1, GETDATE())
OráculoSYSDATE + 1SYSDATE - (1/24)

Calcular la diferencia

Base de datosDías entre
MySQLDATEDIFF('2024-01-15', '2024-01-01')
PostgreSQL'2024-01-15'::date - '2024-01-01'::date
SQLitejulianday('2024-01-15') - julianday('2024-01-01')
Servidor SQLDATEDIFF(day, '2024-01-01', '2024-01-15')
OráculoTO_DATE('2024-01-15') - TO_DATE('2024-01-01')

Mejores prácticas

1. Almacenar marcas de tiempo en UTC

Almacene siempre las marcas de tiempo en formato UTC y conviértalas a la hora local solo cuando se las muestre a los usuarios.

-- 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. Utilice tipos de datos adecuados

Caso de usoTipo recomendado
Almacenamiento UTCTIMESTAMP WITH TIME ZONE
Sólo hora localTIMESTAMP WITHOUT TIME ZONE
Marca de tiempo de UnixBIGINT (para portabilidad)
Sólo fechaDATE

3. Manejar adecuadamente las conversiones de zona horaria

-- 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;

Herramientas relacionadas