Timestamp Resources

SQL Timestamp Functions Reference

SQL Timestamp Functions Reference

Quick reference for timestamp operations across popular database systems.

Current Timestamp

DatabaseCurrent Timestamp (UTC)Current Timestamp (Local)
MySQLNOW(), UTC_TIMESTAMP()NOW(), LOCALTIMESTAMP()
PostgreSQLNOW(), CURRENT_TIMESTAMPNOW(), CURRENT_TIMESTAMP
SQLitedatetime('now')datetime('now', 'localtime')
SQL ServerGETUTCDATE()GETDATE(), SYSDATETIME()
OracleSYSTIMESTAMP, SYS_EXTRACT_UTC(SYSTIMESTAMP)SYSTIMESTAMP

Unix Timestamp Operations

Get Current Unix Timestamp

DatabaseCode
MySQLUNIX_TIMESTAMP()
PostgreSQLEXTRACT(EPOCH FROM CURRENT_TIMESTAMP)
SQLitestrftime('%s', 'now')
SQL ServerDATEDIFF(s, '1970-01-01', GETUTCDATE())
Oracle(SYSTIMESTAMP - TO_TIMESTAMP('1970-01-01', 'YYYY-MM-DD')) * 86400

Convert Unix Timestamp to Date

DatabaseCode
MySQLFROM_UNIXTIME(1704067200)
PostgreSQLTO_TIMESTAMP(1704067200)
SQLitedatetime(1704067200, 'unixepoch')
SQL ServerDATEADD(s, 1704067200, '1970-01-01')
OracleTO_DATE('1970-01-01', 'YYYY-MM-DD') + (1704067200 / 86400)

Convert Date to Unix Timestamp

DatabaseCode
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')
SQL ServerDATEDIFF(s, '1970-01-01', '2024-01-01 00:00:00')
OracleTO_CHAR('2024-01-01 00:00:00', 'J') - TO_CHAR(DATE '1970-01-01', 'J')) * 86400

Date Formatting

Common Date Formats

DatabaseISO 8601US FormatEU Format
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')--
SQL ServerFORMAT(GETUTCDATE(), 'yyyy-MM-ddTHH:mm:ss')FORMAT(GETDATE(), 'MM/dd/yyyy')FORMAT(GETDATE(), 'dd/MM/yyyy')
OracleTO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD"T"HH24:MI:SS')TO_CHAR(SYSDATE, 'MM/DD/YYYY')TO_CHAR(SYSDATE, 'DD/MM/YYYY')

Timezone Operations

Get Current Timezone

DatabaseCode
MySQLTIMEZONE_NAME, @@time_zone
PostgreSQLcurrent_setting('timezone')
SQLiteN/A (no timezone support)
SQL ServerGETDATE(), DATENAME(TIMEZONE, SYSDATETIMEOFFSET())
OracleSESSIONTIMEZONE, DBTIMEZONE

Convert Timezone

DatabaseCode
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
SQL ServerGETDATE() AT TIME ZONE 'UTC' AT TIME ZONE 'Eastern Standard Time'
OracleFROM_TZ(TIMESTAMP '2024-01-01 12:00:00', 'UTC') AT TIME ZONE 'America/New_York'

Timestamp Arithmetic

Add/Subtract Time

DatabaseAdd 1 DaySubtract 1 Hour
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')
SQL ServerDATEADD(day, 1, GETDATE())DATEADD(hour, -1, GETDATE())
OracleSYSDATE + 1SYSDATE - (1/24)

Calculate Difference

DatabaseDays Between
MySQLDATEDIFF('2024-01-15', '2024-01-01')
PostgreSQL'2024-01-15'::date - '2024-01-01'::date
SQLitejulianday('2024-01-15') - julianday('2024-01-01')
SQL ServerDATEDIFF(day, '2024-01-01', '2024-01-15')
OracleTO_DATE('2024-01-15') - TO_DATE('2024-01-01')

Best Practices

1. Store Timestamps in UTC

Always store timestamps in UTC format and convert to local time only when displaying to users.

-- 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 Appropriate Data Types

Use CaseRecommended Type
UTC storageTIMESTAMP WITH TIME ZONE
Local time onlyTIMESTAMP WITHOUT TIME ZONE
Unix timestampBIGINT (for portability)
Date onlyDATE

3. Handle Timezone Conversions Properly

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

Related Tools