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
- Base de tempo atômico: UTC usa centenas de relógios atômicos em todo o mundo para extrema precisão
- Segundos bissextos: ajustes ocasionais de 1 segundo para permanecer sincronizado com a rotação da Terra
- Referência Universal: Usado como horário base para todos os fusos horários (UTC+X, UTC-X)
- 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
| Recurso | UTC (Tempo Universal Coordenado) | GMT (horário de Greenwich) |
|---|---|---|
| Baseado em | Relógios atômicos (TAI) | Observações solares em Greenwich |
| Precisão | ±0,9 segundos | Varia com a rotação da Terra |
| Fuso horário | Nunca muda (UTC+0) | Mudanças com o horário de verão do Reino Unido (GMT/BST) |
| Ajustes de horário de verão | Não | Sim (Reino Unido segue BST no verão) |
| Segundos bissextos | Sim (para corresponder à rotação da Terra) | Não (não usa segundos bissextos) |
| Uso principal | Computação, internet, aviação | Fuso horário do Reino Unido, marítimo |
| ISO 8601 | Usa padrão UTC | Não é um padrão na ISO 8601 |
| APIs de programação | A maioria usa UTC internamente | Raramente 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
- Desenvolvimento de software: a maioria das linguagens de programação usa UTC internamente
- Carimbos de data e hora do banco de dados: armazene todos os horários em UTC para consistência
- Respostas da API: Retorna carimbos de data/hora UTC para interpretação universal
- Sistemas Globais: Aplicativos usados em vários fusos horários
- 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
- Fuso horário do Reino Unido: Representa a hora no Reino Unido (Europa/Londres)
- Dados históricos: Lidando com carimbos de data/hora anteriores a 1972, quando o GMT era padrão
- Operações Marítimas: Alguns sistemas marítimos ainda fazem referência ao GMT
- 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
- Sempre armazene carimbos de data/hora em UTC nos bancos de dados
- Use o formato ISO 8601 para representações de string:
2026-01-01T12:00:00Z - Exibir horários no fuso horário local do usuário para uma melhor experiência do usuário
- Use identificadores de fuso horário da IANA (por exemplo,
América/Nova_Iorque, nãoEST) - Lidar com o horário de verão com bibliotecas de fuso horário adequadas
Bibliotecas recomendadas
| Idioma | Biblioteca | Finalidade |
|---|---|---|
| JavaScript | date-fns-tz, luxon, momento-fuso horário | Tratamento de fuso horário |
| Pitão | pytz, zoneinfo (Python 3.9+) | Tratamento de fuso horário |
| Java | java.time (Java 8+) | Tratamento de fuso horário e data |
| Vá | pacote time (biblioteca padrão) | Tratamento de fuso horário |
| Rubi | tzinfo | Tratamento 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
- Unix Timestamp Converter - Converte entre carimbos de data e hora Unix e datas
- Conversor ISO 8601 - Trabalhar com carimbos de data/hora ISO 8601
- Conversor de fuso horário - Converta horários entre fusos horários
- Current Timestamp - Obtenha a hora UTC atual em vários formatos
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.