Saltar para o conteúdo

ISO 8601 explicado: o formato de data internacional que todo desenvolvedor deveria usar

Por que YYYY-MM-DD é inequívoco, como o padrão lida com semanas, durações e intervalos, e as razões pelas quais ele alimenta bancos de dados e APIs JSON.

· 10 min de leitura · Gabriel

Escrever a data no formato ISO 8601
Índice

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 ano
  • P3M — três meses
  • PT2H30M — duas horas e trinta minutos
  • P1Y2M10DT2H30M — 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-DD em 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-30 está 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).

← Voltar a todos os artigos