Maîtriser les fuseaux horaires : un guide complet pour la gestion temporelle en programmation

Tout plaquer pour devenir Voyageur temporel

Récemment, j’ai consacré une grande partie de mon temps de travail à démystifier la manipulation des dates et heures liées aux fuseaux horaires en programmation, en expliquant ce concept à mes collègues. Ce domaine peut sembler complexe à aborder, souvent piégeant les développeurs dans des erreurs subtiles. Cet article vise à clarifier l’ensemble des concepts et à les présenter de manière accessible.

Niveau : Débutant

Prérequis : Aucun

Image de l'article Maîtriser les Fuseaux Horaires : Un Guide Complet pour la Gestion Temporelle en Programmation

Commençons par quelques principes importants à assimiler

  1. Les fuseaux horaires sont des régions géographiques dans lesquelles l’heure est la même.
  2. UTC signifie « Temps Universel Coordonné » et est souvent utilisé comme point de référence. Il est également similaire à l’ancien GMT (Greenwich Mean Time), bien que GMT soit devenu obsolète.
  3. En France, l’heure d’été est en UTC+2, cela signifie qu’il faut retirer 2h pour obtenir l’heure au format UTC. L’heure d’hiver est en UTC+1.
    => A titre de comparaison, Melbourne en Australie est en UTC+11 en été.

Peu importe où vous vous trouvez sur Terre ou dans quel fuseau horaire vous êtes, le moment présent est identique pour tout le monde.

Par conséquent, il est plus logique de spécifier les durées plutôt que des heures de fin précises. Les durées peuvent être ajoutées à l’heure actuelle de l’utilisateur, quel que soit son emplacement géographique.

Si deux interlocuteurs se trouvent dans le même fuseau horaire, il est généralement acceptable d’utiliser l’heure locale pour effectuer des comparaisons temporelles, car les ajustements de fuseau horaire ne sont pas nécessaires.

Cependant, lorsque les interlocuteurs sont dans des fuseaux horaires différents, il est souvent plus simple et moins sujet aux erreurs de travailler avec l’heure UTC, car elle ne dépend d’aucun fuseau horaire spécifique et simplifie les calculs.

Qu’est-ce qu’une date et une heure en programmation ?

En programmation, une date et une heure sont des données utilisées pour représenter un moment dans le temps.

Une date se compose généralement d’une année, d’un mois et d’un jour, tandis qu’une heure inclut des informations sur les heures, les minutes et éventuellement les secondes.

Ces valeurs sont souvent stockées sous forme de nombres, appelés « timestamps » , qui comptent les secondes ou les millisecondes écoulées depuis un point de référence, comme le 1er janvier 1970 (Unix Epoch).

Unix Epoch ?

L’Unix Epoch (ou Époque Unix) est un point de référence utilisé dans le système d’exploitation Unix et de nombreux systèmes informatiques. Il s’agit d’un instant précis dans le temps qui marque le début de l’époque Unix. Plus spécifiquement, l’Unix Epoch correspond au 1er janvier 1970 à 00:00:00 UTC.

Vous pouvez aller consulter cet article Wikipédia sur l’Heure Unix pour plus d’informations.

Formats courants pour représenter les dates et heures

Les dates et heures peuvent être représentées dans divers formats, tels que « YYYY-MM-DD HH:MM:SS » (par exemple, 2023-09-27 15:30:00) ou au format ISO 8601 (par exemple, 2023-09-27T15:30:00Z) pour les dates UTC.

Exemple pratique en JavaScript

Mise en situation : J’ai la tâche d’afficher un compte à rebours sur les ordinateurs des utilisateurs dispersés dans le monde entier. Les informations de date et d’heure me parviennent en format UTC via une requête vers une API distante.

// Date et heure en format UTC provenant de l'API
const dateUTCFromAPI = "2023-09-30T12:00:00Z";

// Fonction pour afficher le compte à rebours
function afficherCompteARebours(dateUTC) {
  // Convertir la date UTC en objet Date
  const dateFin = new Date(dateUTC);

  // Obtenir la date et l'heure actuelles en temps local, puis convertir en UTC
  const dateActuelle = new Date();
  const dateActuelleUTC = new Date(dateActuelle.toISOString());
    
  // Calculer la différence entre la date de fin et la date actuelle en millisecondes
  const differenceEnMillisecondes = dateFin - dateActuelleUTC;
  // Vérifier si la date de fin est déjà passée
  if (differenceEnMillisecondes <= 0) {
    console.log("Le compte à rebours est terminé !");
    return;
  }

  // Calcul des jours restants
  const millisecondesParJour = 1000 * 60 * 60 * 24;
  const jours = Math.floor(differenceEnMillisecondes / millisecondesParJour);
  // Calcul du nombre de millisecondes restantes après avoir soustrait les jours
  const millisecondesRestantesApresJours = differenceEnMillisecondes % millisecondesParJour;

  // Calcul des heures restantes
  const millisecondesParHeure = 1000 * 60 * 60;
  const heures = Math.floor(millisecondesRestantesApresJours / millisecondesParHeure);
// Calcul du nombre de millisecondes restantes après avoir soustrait les heures
  const millisecondesRestantesApresHeures = millisecondesRestantesApresJours % millisecondesParHeure;

  // Calcul des minutes restantes
  const millisecondesParMinute = 1000 * 60;
  const minutes = Math.floor(millisecondesRestantesApresHeures / millisecondesParMinute);
  // Calcul du nombre de millisecondes restantes après avoir soustrait les minutes
  const millisecondesRestantesApresMinutes = millisecondesRestantesApresHeures % millisecondesParMinute;

  // Calcul des secondes restantes
  const millisecondesParSeconde = 1000;
  const secondes = Math.floor(millisecondesRestantesApresMinutes / millisecondesParSeconde);
// Afficher le compte à rebours console.log(`Compte à rebours : ${jours} jours, ${heures} heures, ${minutes} minutes, ${secondes} secondes`); } // Appeler la fonction avec la date en UTC afficherCompteARebours(dateUTCFromAPI);

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.