Section courante

A propos

Section administrative du site

MKTIME

Fabriquer le temps
Langage C time.h

Syntaxe

time_t *mktime(struct tm *ptrheure)

Paramètres

Nom Description
ptrheure Ce paramètre permet d'indiquer le temps à traiter

Description

Cette fonction permet de convertir des heures locales en heures normalisé.

Algorithme

MODULE MKTIME(tm_ptr)
   * Normaliser la structure tm (ajuster les valeurs si nécessaire)
   normalize(tm_ptr)

   * Calculer le nombre de secondes depuis l'époque Unix (1er janvier 1970)
   seconds ← 0
   * Ajouter les secondes pour les années
   BOUCLE POUR year ← 1970 JUSQU'A tm_ptr.year FAIRE
      secondsseconds + days_in_year(year) x 24 x 60 x 60
   FIN BOUCLE POUR

   * Ajouter les secondes pour les mois
   BOUCLE POUR month ← 1 JUSQU'A tm_ptr.month FAIRE
      secondsseconds + days_in_month(tm_ptr.year, month) x 24 x 60 x 60
   FIN BOUCLE POUR

   * Ajouter les secondes pour les jours
   seconds ← seconds + tm_ptr.day x 24 x 60 x 60

   * Ajouter les secondes pour les heures, minutes et secondes
   seconds ← seconds tm_ptr.hour x 60 x 60
   seconds ← seconds tm_ptr.minute x 60
   seconds ← seconds tm_ptr.second

   * Retourner le nombre total de secondes depuis l'époque Unix
   RETOURNE seconds

Remarques

Exemple

Voici un exemple permettant de calculer le nombre de jours entre deux dates à l'aide de cette fonction :

Essayer maintenant !
  1. #include <stdio.h>
  2. #include <time.h>
  3.  
  4. int GetNumberDaysBetween2Dates(char *date1, char *date2) {
  5.  struct tm timestamp1,timestamp2;
  6.  sscanf(date1,"%i-%i-%i",&timestamp1.tm_year,&timestamp1.tm_mon,&timestamp1.tm_mday);
  7.  sscanf(date2,"%i-%i-%i",&timestamp2.tm_year,&timestamp2.tm_mon,&timestamp2.tm_mday);
  8.  timestamp1.tm_sec = timestamp1.tm_min = timestamp1.tm_hour = timestamp1.tm_yday = timestamp1.tm_isdst = 0;
  9.  timestamp1.tm_year -= 1900;
  10.  timestamp1.tm_mon--;
  11.  timestamp2.tm_sec = timestamp2.tm_min = timestamp2.tm_hour = timestamp2.tm_yday = timestamp2.tm_isdst = 0;
  12.  timestamp2.tm_year -= 1900;
  13.  timestamp2.tm_mon--;
  14.  return abs(mktime(&timestamp2) - mktime(&timestamp1))/86400; 
  15. }
  16.  
  17. int main() {
  18.  printf("2011-01-01 au 2011-12-31 = %i jours\n",GetNumberDaysBetween2Dates("2011-1-1","2011-12-31"));
  19.  printf("2011-12-31 au 2011-01-01 = %i jours\n",GetNumberDaysBetween2Dates("2011-12-31","2011-1-1"));
  20.  printf("2011-06-15 au 2011-08-01 = %i jours\n",GetNumberDaysBetween2Dates("2011-6-15","2011-8-01"));
  21.  printf("2011-06-15 au 2011-06-19 = %i jours\n",GetNumberDaysBetween2Dates("2011-6-15","2011-6-19"));
  22.  printf("2011-06-15 au 2011-06-16 = %i jours\n",GetNumberDaysBetween2Dates("2011-6-15","2011-6-16"));
  23.  printf("2011-06-15 au 2011-06-15 = %i jours\n",GetNumberDaysBetween2Dates("2011-06-15","2011-06-15"));
  24.  return 0;
  25. }

on obtiendra le résultat suivant :

2011-01-01 au 2011-12-31 =364 jours
2011-12-31 au 2011-01-01 =364 jours
2011-06-15 au 2011-08-01 =47 jours
2011-06-15 au 2011-06-19 =4 jours
2011-06-15 au 2011-06-16 =1 jours
2011-06-15 au 2011-06-15 =0 jours

Voir également

Langage de programmation - C - Référence de procédures et fonctions - localtime
Langage de programmation - C - Référence de procédures et fonctions - time
Langage de programmation - C++ - Référence de procédures et fonctions - mktime

Références

Langage C, Edition Micro-Application, Gehard Willms, 2001, ISBN: 2-7429-2008-0, page 733.
Borland C++ for Windows 4.0, Library Reference, Edition Borland, 1993, Part # BCP1240WW21772, page 179.

Dernière mise à jour : Mardi, le 28 juillet 2015