Guide

Diferença entre UTC e GMT

Introdução

UTC e GMT são dois padrões de horário frequentemente confundidos por desenvolvedores e usuários. Embora possam parecer intercambiáveis ​​no uso diário, eles apresentam diferenças técnicas importantes que são importantes para o desenvolvimento de software, aplicativos urgentes e sistemas globais.

Resumo rápido: UTC é um padrão de tempo preciso baseado em relógios atômicos, enquanto GMT é baseado em observações astronômicas. UTC é o padrão moderno para a maioria dos aplicativos, enquanto GMT é principalmente um nome de fuso horário.

O que é UTC?

Definição

UTC (Tempo Universal Coordenado) é o principal padrão de horário pelo qual o mundo regula os relógios e a hora. É baseado no Tempo Atômico Internacional (TAI) com segundos bissextos adicionados para mantê-lo dentro de 0,9 segundos do UT1 (tempo solar).

UTC Characteristics:
  - Based on: Atomic clocks (International Atomic Time - TAI)
  - Precision: ±0.9 seconds from UT1 (solar time)
  - Time Zone: No time zone offset (UTC+0)
  - Daylight Saving: No DST adjustments
  - Usage: Worldwide standard for computing, internet, and aviation

Principais recursos

  1. Base de tempo atômico: UTC usa centenas de relógios atômicos em todo o mundo para extrema precisão
  2. Segundos bissextos: ajustes ocasionais de 1 segundo para permanecer sincronizado com a rotação da Terra
  3. Referência Universal: Usado como horário base para todos os fusos horários (UTC+X, UTC-X)
  4. Sem horário de verão: nunca muda para o horário de verão

Exemplo de código: Obtendo a hora UTC

// Get current UTC time
const now = new Date();
const utcString = now.toISOString(); // "2026-01-01T12:00:00.000Z"
const utcTimestamp = Math.floor(now.getTime() / 1000); // 1735689600

console.log('UTC ISO String:', utcString);
console.log('UTC Timestamp:', utcTimestamp);
from datetime import datetime, timezone

# Get current UTC time
now_utc = datetime.now(timezone.utc)
utc_iso = now_utc.isoformat()
utc_timestamp = int(now_utc.timestamp())

print(f'UTC ISO String: {utc_iso}')
print(f'UTC Timestamp: {utc_timestamp}')
import java.time.Instant;
import java.time.ZoneOffset;

// Get current UTC time
Instant now = Instant.now();
String utcIso = now.toString();
long utcTimestamp = now.getEpochSecond();

System.out.println("UTC ISO String: " + utcIso);
System.out.println("UTC Timestamp: " + utcTimestamp);

O que é GMT?

Definição

GMT (Horário de Greenwich) é um fuso horário originalmente baseado na hora solar no Royal Observatory em Greenwich, Londres. Historicamente, foi usado como o principal padrão de horário mundial, mas foi amplamente substituído pelo UTC.

GMT Characteristics:
  - Based on: Astronomical observations (solar time at Greenwich)
  - Precision: Varies with Earth's rotation irregularities
  - Time Zone: UTC+0 (during winter), UTC+1 (during summer in UK)
  - Daylight Saving: Subject to UK daylight saving time (BST)
  - Usage: UK time zone name, some maritime operations

Contexto Histórico

O GMT foi estabelecido em 1884 na Conferência Internacional de Meridianos. Foi o principal padrão de horário do mundo até a adoção do UTC na década de 1960.

Exemplo de código: Obtendo o horário GMT

// Get current GMT (London) time
const now = new Date();
const options = { timeZone: 'Europe/London', timeZoneName: 'short' };
const gmtString = now.toLocaleString('en-US', options);

console.log('GMT/London Time:', gmtString);

// Note: This shows GMT or BST depending on UK daylight saving
# Get current GMT (London) time
from datetime import datetime
import pytz

# Get current GMT (London) time
london_tz = pytz.timezone('Europe/London')
now_london = datetime.now(london_tz)

print(f'GMT/London Time: {now_london.strftime("%Y-%m-%d %H:%M:%S %Z")}')

# Note: This shows GMT or BST depending on UK daylight saving
// Get current GMT (London) time
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

// Get current GMT (London) time
ZoneId londonZone = ZoneId.of("Europe/London");
ZonedDateTime londonTime = ZonedDateTime.now(londonZone);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss z");

System.out.println("GMT/London Time: " + londonTime.format(formatter));

// Note: This shows GMT or BST depending on UK daylight saving

Principais diferenças: UTC x GMT

Tabela de comparação

RecursoUTC (Tempo Universal Coordenado)GMT (horário de Greenwich)
Baseado emRelógios atômicos (TAI)Observações solares em Greenwich
Precisão±0,9 segundosVaria com a rotação da Terra
Fuso horárioNunca muda (UTC+0)Mudanças com o horário de verão do Reino Unido (GMT/BST)
Ajustes de horário de verãoNãoSim (Reino Unido segue BST no verão)
Segundos bissextosSim (para corresponder à rotação da Terra)Não (não usa segundos bissextos)
Uso principalComputação, internet, aviaçãoFuso horário do Reino Unido, marítimo
ISO 8601Usa padrão UTCNão é um padrão na ISO 8601
APIs de programaçãoA maioria usa UTC internamenteRaramente usado em APIs

O fator do segundo salto

O UTC ocasionalmente adiciona ou subtrai um segundo bissexto para permanecer sincronizado com a rotação da Terra. A partir de 2026, a diferença é:

UTC - TAI = -37 seconds (UTC is 37 seconds behind atomic time)
UTC - UT1 = ±0.9 seconds (UTC is kept close to solar time)

Current UTC-GMT offset: Usually 0, but varies slightly due to leap seconds

Importante: Embora UTC e GMT sejam frequentemente tratados como iguais no uso diário, eles podem diferir em até 0,9 segundos devido aos segundos bissextos. Para a maioria das aplicações, esta diferença é insignificante, mas é importante para:

  • Negociação de alta frequência
  • Pesquisa científica
  • Sistemas de sincronização precisos

Quando usar UTC vs GMT

Usar UTC quando

  1. Desenvolvimento de software: a maioria das linguagens de programação usa UTC internamente
  2. Carimbos de data e hora do banco de dados: armazene todos os horários em UTC para consistência
  3. Respostas da API: Retorna carimbos de data/hora UTC para interpretação universal
  4. Sistemas Globais: Aplicativos usados em vários fusos horários
  5. Sincronização: Sistemas que exigem coordenação de tempo precisa
// Example: Store timestamps in UTC database
const timestamp = Date.now(); // UTC milliseconds
// Store in database: 17356896000000

// Display in user's local time
const userTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
const localTime = new Date(timestamp).toLocaleString('en-US', { timeZone: userTimeZone });

Use GMT quando

  1. Fuso horário do Reino Unido: Representa a hora no Reino Unido (Europa/Londres)
  2. Dados históricos: Lidando com carimbos de data/hora anteriores a 1972, quando o GMT era padrão
  3. Operações Marítimas: Alguns sistemas marítimos ainda fazem referência ao GMT
  4. Sistemas legados: sistemas mais antigos que usam especificamente GMT
// Example: UK time zone handling
const now = new Date();
const ukTime = now.toLocaleString('en-GB', { timeZone: 'Europe/London' });
// Displays as "01/01/2026, 12:00:00 GMT" or "01/01/2026, 13:00:00 BST"

Exemplos de conversão de fuso horário

Convertendo a hora local para UTC

function convertToUTC(dateString, timeZone) {
  const date = new Date(dateString);
  const utcString = date.toISOString();
  const utcTimestamp = Math.floor(date.getTime() / 1000);

  return {
    input: dateString,
    timeZone: timeZone,
    utcString: utcString,
    utcTimestamp: utcTimestamp
  };
}

// Example: Convert Tokyo time to UTC
const result = convertToUTC('2026-01-01 20:00:00', 'Asia/Tokyo');
console.log(result);
// Output: { utcString: "2026-01-01T11:00:00.000Z", utcTimestamp: 1735659600 }
from datetime import datetime
import pytz

def convert_to_utc(date_string, time_zone):
    tz = pytz.timezone(time_zone)
    local_time = tz.localize(datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S"))
    utc_time = local_time.astimezone(pytz.UTC)

    return {
        "input": date_string,
        "time_zone": time_zone,
        "utc_string": utc_time.isoformat(),
        "utc_timestamp": int(utc_time.timestamp())
    }

# Example: Convert Tokyo time to UTC
result = convert_to_utc('2026-01-01 20:00:00', 'Asia/Tokyo')
print(result)
# Output: {'utc_string': '2026-01-01T11:00:00Z', 'utc_timestamp': 1735659600}

Referência de deslocamento de fuso horário UTC

UTC+0:  London (winter), Dublin (winter), Lisbon (winter)
UTC+1: Berlin, Paris, Rome, Madrid (winter), London (summer/BST)
UTC+2: Cairo, Helsinki, Athens, Johannesburg
UTC+3: Moscow, Istanbul, Baghdad, Nairobi
UTC+4: Dubai, Tbilisi, Baku
UTC+5: Karachi, Tashkent, Maldives
UTC+5:30: Mumbai, Kolkata, New Delhi
UTC+8: Beijing, Shanghai, Singapore, Perth
UTC+9: Tokyo, Seoul, Pyongyang
UTC+10: Sydney, Melbourne, Guam
UTC-5: New York (EST), Toronto (EST), Lima
UTC+8: Los Angeles (PST), San Francisco (PST), Vancouver (PST)

Erros comuns a evitar

Erro 1: presumir que UTC = GMT sempre

Embora muitas vezes sejam iguais, podem diferir em até 0,9 segundos. Para aplicações de alta precisão, use UTC explicitamente.

// ❌ Incorrect: Using GMT interchangeably with UTC
const gmtTime = new Date().toGMTString(); // Deprecated method

// ✅ Correct: Using UTC explicitly
const utcTime = new Date().toISOString(); // Proper UTC format

Erro 2: Armazenar a hora local em vez de UTC

Sempre armazene carimbos de data/hora em UTC, converta para a hora local apenas para exibição.

// ❌ Incorrect: Storing local time in database
const localTime = new Date().toLocaleString();
db.save({ created_at: localTime }); // Ambiguous time zone

// ✅ Correct: Storing UTC timestamp in database
const utcTimestamp = Date.now();
db.save({ created_at: utcTimestamp }); // Universal reference

Erro 3: Ignorar as regras do banco de dados de fuso horário

Não assuma compensações fixas de fuso horário. Use o banco de dados de fuso horário da IANA para conversões precisas.

// ❌ Incorrect: Assuming fixed offset for a location
const tokyoOffset = 9 * 60 * 60 * 1000; // UTC+9 in milliseconds

// ✅ Correct: Using IANA time zone database
const tokyoTime = new Date().toLocaleString('en-US', { timeZone: 'Asia/Tokyo' });

Melhores práticas

Para desenvolvedores

  1. Sempre armazene carimbos de data/hora em UTC nos bancos de dados
  2. Use o formato ISO 8601 para representações de string: 2026-01-01T12:00:00Z
  3. Exibir horários no fuso horário local do usuário para uma melhor experiência do usuário
  4. Use identificadores de fuso horário da IANA (por exemplo, América/Nova_Iorque, não EST)
  5. Lidar com o horário de verão com bibliotecas de fuso horário adequadas

Bibliotecas recomendadas

IdiomaBibliotecaFinalidade
JavaScriptdate-fns-tz, luxon, momento-fuso horárioTratamento de fuso horário
Pitãopytz, zoneinfo (Python 3.9+)Tratamento de fuso horário
Javajava.time (Java 8+)Tratamento de fuso horário e data
pacote time (biblioteca padrão)Tratamento de fuso horário
RubitzinfoTratamento de fuso horário

Conclusão

UTC e GMT têm finalidades diferentes:

  • UTC é o padrão de horário moderno e preciso baseado em relógios atômicos
  • GMT é principalmente um nome de fuso horário para o Reino Unido, com base na hora solar

Para desenvolvimento de software e sistemas globais, sempre use UTC como padrão de horário. Use GMT apenas quando precisar especificamente da representação do fuso horário do Reino Unido ou da compatibilidade do sistema legado.

Ferramentas relacionadas

Perguntas frequentes

P: UTC é igual a GMT?

R: Eles geralmente são tratados como iguais no uso diário, mas podem diferir em até 0,9 segundos. O UTC é baseado em relógios atômicos, enquanto o GMT é baseado em observações solares.

P: O UTC segue o horário de verão?

R: Não, o UTC nunca muda para o horário de verão. É um padrão de tempo constante. Os fusos horários podem ajustar seu deslocamento do UTC (por exemplo, UTC+1 para UTC+2), mas o próprio UTC não muda.

P: Por que vejo "GMT" nas minhas configurações de fuso horário?

R: Muitos sistemas usam "GMT" como nome legado para UTC+0. Em aplicações modernas, isso geralmente se refere ao fuso horário UTC + 0, não ao horário astronômico de Greenwich.

P: Quantos fusos horários existem?

R: Existem 24 fusos horários padrão (UTC-12 a UTC+14), mas o banco de dados da IANA inclui mais de 400 fusos horários nomeados para levar em conta alterações históricas, regras de horário de verão e variações regionais.

P: Devo usar UTC ou GMT na minha aplicação?

R: Use UTC. É o padrão moderno usado por quase todas as linguagens de programação, bancos de dados e APIs. Use GMT apenas se precisar especificamente da representação do fuso horário do Reino Unido.