O problema que o ISO 8601 resolve
O que significa 03/04/05? Nos Estados Unidos é 4 de março de 2005. Na maior parte da Europa é 3 de abril de 2005. No Japão é 5 de abril de 2003. Esse tipo de ambiguidade causou contratos fracassados, voos perdidos, faturas pagas em dobro e pelo menos um famoso desastre de migração de banco de dados. O ISO 8601, publicado pela primeira vez em 1988 e revisado recentemente como ISO 8601-1:2019 e ISO 8601-2:2019, existe para acabar com tudo isso.
O formato básico
A regra principal é simples: escreva as datas como AAAA-MM-DD, sempre com quatro dígitos no ano, sempre com a maior unidade primeiro. O formato é ordenado corretamente como texto, e é por isso que é o padrão em bancos de dados, arquivos de log e nomes de arquivos.
Horas e datas-horas combinadas
As horas usam notação de 24 horas: HH:MM:SS. Uma data e hora combinadas usam um "T" literal como separador: 2025-01-25T14:30:00. As informações de fuso horário são adicionadas com um "Z" para UTC ou um deslocamento com sinal como +02:00. Um instante totalmente qualificado fica assim: 2025-01-25T14:30:00+01:00.
Datas por semana
O ISO 8601 também define um calendário baseado em semanas que muitas empresas usam para relatórios fiscais. As semanas começam na segunda-feira. A semana 1 é a que contém a primeira quinta-feira do ano. Uma data por semana é escrita como AAAA-Wss-D, por exemplo 2025-W04-6. É por isso que alguns anos têm 52 semanas ISO e outros 53.
Datas ordinais
Um formato menos comum mas útil é a data ordinal: AAAA-DDD, onde DDD é o dia do ano de 001 a 365 (ou 366 em um ano bissexto). A NASA, os meteorologistas e a indústria aérea usam-no frequentemente.
Durações e intervalos
O ISO 8601 também define uma sintaxe para durações. Uma duração começa com a letra "P" (de "period") e usa designadores de uma única letra. Exemplos:
P1Y— um anoP3M— três mesesPT2H30M— duas horas e trinta minutosP1Y2M10DT2H30M— um ano, dois meses, dez dias, duas horas e meia
Um intervalo são duas datas-horas separadas por uma barra: 2025-01-01T00:00:00Z/2025-12-31T23:59:59Z. Um intervalo repetido é precedido por R[n]/.
RFC 3339: o perfil da internet
A maioria dos protocolos da internet não usa ISO 8601 diretamente. Usa o RFC 3339, uma especificação de 2002 de Graham Klyne e Chris Newman que define um subconjunto estrito do ISO 8601. O RFC 3339 é usado por APIs JSON, arquivos de log, tokens OAuth e cabeçalhos de e-mail.
Conselhos práticos para desenvolvedores
- Armazene sempre os carimbos de data/hora em UTC. Converta para hora local apenas ao exibir ao usuário.
- Escreva sempre anos com quatro dígitos.
- Use
AAAA-MM-DDem nomes de arquivos; eles são ordenados cronologicamente sem lógica extra. - Se a sua API retorna uma data, retorne-a como string ISO 8601 em UTC, não como timestamp Unix.
- Use uma biblioteca real para fazer parse. Parsers regex feitos à mão acabam falhando.
- Cuidado com o ano-semana ISO.
2024-12-30está no ano-semana ISO 2025.
Leituras complementares
- ISO, "ISO 8601-1:2019 Date and time — Representations for information interchange — Part 1: Basic rules" (2019).
- Klyne, G. e Newman, C., "Date and Time on the Internet: Timestamps", IETF RFC 3339 (julho de 2002).