Guides
Différence entre UTC et GMT
Introduction
UTC et GMT sont deux standards de temps souvent confondus par les développeurs et les utilisateurs. Même s'ils semblent interchangeables au quotidien, ils présentent des différences techniques importantes pour le développement logiciel, les applications sensibles au temps et les systèmes globaux.
Résumé rapide : UTC est un standard précis basé sur des horloges atomiques, tandis que GMT est basé sur des observations astronomiques. UTC est le standard moderne pour la plupart des applications, tandis que GMT est surtout un nom de fuseau horaire.
Qu'est-ce que l’UTC ?
Définition
UTC (Temps Universel Coordonné) est le standard principal qui régit l'heure dans le monde. Il est basé sur le Temps Atomique International (TAI) avec des secondes intercalaires ajoutées pour rester à moins de 0,9 seconde d’UT1 (temps solaire).
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
Caractéristiques clés
- Base atomique : UTC utilise des centaines d’horloges atomiques dans le monde pour une précision extrême
- Secondes intercalaires : ajustements ponctuels d’une seconde pour rester synchronisé avec la rotation de la Terre
- Référence universelle : base de tous les fuseaux horaires (UTC+X, UTC‑X)
- Sans DST : ne change jamais à l’heure d’été
Exemple de code : obtenir l’heure 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);
Qu’est-ce que le GMT ?
Définition
GMT (Greenwich Mean Time) est un fuseau horaire basé à l’origine sur le temps solaire de l’Observatoire royal de Greenwich, à Londres. Historiquement, c’était le standard principal, mais il a été largement remplacé par l’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
Contexte historique
Le GMT a été établi en 1884 lors de la Conférence internationale du méridien. Il a été le standard mondial jusqu’à l’adoption de l’UTC dans les années 1960.
Exemple de code : obtenir l’heure 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
Différences clés : UTC vs GMT
Tableau comparatif
| Caractéristique | UTC (Temps Universel Coordonné) | GMT (Greenwich Mean Time) |
|---|---|---|
| Basé sur | Horloges atomiques (TAI) | Observations solaires à Greenwich |
| Précision | ±0,9 seconde | Varie avec la rotation de la Terre |
| Fuseau horaire | Ne change jamais (UTC+0) | Change avec l’heure d’été britannique (GMT/BST) |
| DST | Non | Oui (BST en été au Royaume‑Uni) |
| Secondes intercalaires | Oui (pour suivre la rotation terrestre) | Non (pas de secondes intercalaires) |
| Usage principal | Informatique, internet, aviation | Fuseau horaire UK, maritime |
| ISO 8601 | Utilise le standard UTC | Pas un standard ISO 8601 |
| APIs | La plupart utilisent UTC en interne | Rarement utilisé dans les APIs |
Le facteur seconde intercalaire
UTC ajoute ou retire parfois une seconde intercalaire pour rester synchronisé avec la rotation de la Terre. En 2026, la différence est :
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
Important : Bien que l’UTC et le GMT soient souvent considérés comme équivalents, ils peuvent différer jusqu’à 0,9 seconde à cause des secondes intercalaires. Pour la plupart des applications, c’est négligeable, mais cela compte pour :
- Le trading haute fréquence
- La recherche scientifique
- Les systèmes de synchronisation de précision
Quand utiliser UTC vs GMT
Utiliser UTC lorsque
- Développement logiciel : la plupart des langages utilisent UTC en interne
- Timestamps en base : stocker en UTC pour la cohérence
- Réponses API : renvoyer des timestamps UTC pour une interprétation universelle
- Systèmes globaux : applications utilisées dans plusieurs fuseaux
- Synchronisation : systèmes nécessitant une coordination temporelle précise
// 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 });
Utiliser GMT lorsque
- Fuseau horaire UK : représenter l’heure au Royaume‑Uni (Europe/London)
- Données historiques : timestamps pré‑1972 quand GMT était le standard
- Maritime : certains systèmes maritimes utilisent encore GMT
- Systèmes legacy : anciens systèmes qui utilisent explicitement 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"
Exemples de conversion de fuseau horaire
Convertir une heure locale en 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}
Référence des offsets 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)
Erreurs courantes à éviter
Erreur 1 : supposer que UTC = GMT
Même si c’est souvent le cas, l’écart peut atteindre 0,9 seconde. Pour les applications de haute précision, utilisez UTC explicitement.
// ❌ 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
Erreur 2 : stocker l’heure locale au lieu d’UTC
Stockez toujours les timestamps en UTC, puis convertissez en heure locale pour l’affichage.
// ❌ 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
Erreur 3 : ignorer la base de données des fuseaux
N’assumez pas d’offset fixe. Utilisez la base de données IANA pour des conversions correctes.
// ❌ 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' });
Bonnes pratiques
Pour les développeurs
- Stocker toujours en UTC dans les bases de données
- Utiliser le format ISO 8601 pour les chaînes :
2026-01-01T12:00:00Z - Afficher l’heure locale de l’utilisateur pour une meilleure UX
- Utiliser les identifiants IANA (ex.
America/New_York, pasEST) - Gérer l’heure d’été avec des bibliothèques de fuseaux
Bibliothèques recommandées
| Langage | Bibliothèque | Usage |
|---|---|---|
| JavaScript | date-fns-tz, luxon, moment-timezone | Gestion des fuseaux horaires |
| Python | pytz, zoneinfo (Python 3.9+) | Gestion des fuseaux horaires |
| Java | java.time (Java 8+) | Dates et fuseaux |
| Go | time (stdlib) | Gestion des fuseaux |
| Ruby | tzinfo | Gestion des fuseaux |
Conclusion
UTC et GMT n’ont pas le même rôle :
- UTC est le standard moderne et précis basé sur des horloges atomiques
- GMT est principalement un nom de fuseau horaire britannique, basé sur le temps solaire
Pour le développement logiciel et les systèmes globaux, utilisez toujours UTC comme standard. N’utilisez GMT que si vous avez besoin du fuseau UK ou de compatibilité legacy.
Outils associés
- Unix Timestamp Converter - Convertir entre timestamps Unix et dates
- ISO 8601 Converter - Travailler avec des timestamps ISO 8601
- Timezone Converter - Convertir des heures entre fuseaux
- Current Timestamp - Obtenir l’heure UTC actuelle en plusieurs formats
FAQ
Q : UTC est-il identique à GMT ?
R : Ils sont souvent considérés comme équivalents, mais peuvent différer jusqu’à 0,9 seconde. UTC est basé sur des horloges atomiques, GMT sur des observations solaires.
Q : UTC observe-t-il l’heure d’été ?
R : Non, UTC ne change jamais pour l’heure d’été. Les fuseaux peuvent ajuster leur offset (ex. UTC+1 à UTC+2), mais l’UTC reste constant.
Q : Pourquoi vois‑je “GMT” dans les réglages de fuseau ?
R : Beaucoup de systèmes utilisent “GMT” comme nom historique pour UTC+0. Dans les applications modernes, cela désigne généralement UTC+0, pas le GMT astronomique.
Q : Combien y a‑t‑il de fuseaux horaires ?
R : Il existe 24 fuseaux horaires standards (UTC‑12 à UTC+14), mais la base IANA contient plus de 400 fuseaux nommés pour refléter l’historique, le DST et les variations régionales.
Q : Dois‑je utiliser UTC ou GMT dans mon application ?
R : Utilisez UTC. C’est le standard moderne utilisé par la plupart des langages, bases de données et APIs. Utilisez GMT uniquement si vous avez besoin du fuseau UK.