Langage C/C++

Gestion des dates en langage C

La gestion des dates en langage C peut sembler complexe au premier abord, mais avec une compréhension approfondie des fonctions et des structures de données disponibles, elle devient plus facile à manipuler. Voici un guide détaillé pour vous aider à comprendre et à gérer les dates en langage C :

1. Structures de données de base :

En langage C, les dates sont souvent représentées à l’aide de la structure tm définie dans la bibliothèque time.h. Cette structure contient les éléments suivants :

struct tm {
    int tm_sec;   // Secondes (0-59)
    int tm_min;   // Minutes (0-59)
    int tm_hour;  // Heures (0-23)
    int tm_mday;  // Jour du mois (1-31)
    int tm_mon;   // Mois (0-11)
    int tm_year;  // Année - 1900
    int tm_wday;  // Jour de la semaine (0-6, dimanche = 0)
    int tm_yday;  // Jour de l'année (0-365)
    int tm_isdst; // Indicateur de l'heure d'été
};
2. Fonctions de manipulation de dates :
a. Fonctions de temps :
  • time_t time(time_t *t) : Renvoie le temps écoulé depuis l’époque (00:00:00 UTC, le 1er janvier 1970), en secondes.
  • struct tm *localtime(const time_t *timep) : Convertit le temps représenté par time_t en une structure tm pour l’heure locale.
  • struct tm *gmtime(const time_t *timep) : Convertit le temps représenté par time_t en une structure tm pour l’heure GMT (Greenwich Mean Time).
b. Fonctions de formatage :
  • size_t strftime(char *s, size_t max, const char *format, const struct tm *tm) : Formate une structure tm en une chaîne de caractères selon un format spécifié.
  • char *asctime(const struct tm *tm) : Convertit une structure tm en une chaîne de caractères représentant l’heure locale, au format “Www Mmm dd hh:mm:ss yyyy\n”.
3. Exemple d’utilisation :
#include <stdio.h>
#include <time.h>

int main() {
    time_t now;
    struct tm *local;

    // Obtention du temps actuel
    time(&now);
    local = localtime(&now);

    // Affichage du temps actuel
    printf("Date et heure actuelles : %s", asctime(local));

    return 0;
}
4. Conseils pour la gestion des dates :
  • Toujours vérifier le retour des fonctions de manipulation de dates pour détecter d’éventuelles erreurs.
  • Utiliser des constantes symboliques pour représenter les jours de la semaine et les mois.
  • Prendre en compte les différences de fuseaux horaires lors de la manipulation de dates.

Voici quelques exemples pratiques illustrant l’utilisation de la gestion des dates en langage C :

Exemple 1 : Affichage de la date et de l’heure actuelles
#include <stdio.h>
#include <time.h>

int main() {
    time_t now;
    struct tm *local;

    // Obtention du temps actuel
    time(&now);
    local = localtime(&now);

    // Affichage du temps actuel
    printf("Date et heure actuelles : %s", asctime(local));

    return 0;
}

Ce programme utilise les fonctions time() et localtime() pour obtenir et convertir le temps actuel en une structure tm, puis utilise asctime() pour afficher la date et l’heure actuelles.

Exemple 2 : Calcul de l’âge à partir de la date de naissance
#include <stdio.h>
#include <time.h>

int main() {
    // Date de naissance
    struct tm birthday = {0};
    birthday.tm_year = 90;  // Année - 1900
    birthday.tm_mon = 0;    // Janvier (0-11)
    birthday.tm_mday = 1;   // Premier jour du mois

    // Obtention du temps actuel
    time_t now;
    time(&now);
    struct tm *local = localtime(&now);

    // Calcul de l'âge
    int age = local->tm_year - birthday.tm_year;
    if (local->tm_mon < birthday.tm_mon || (local->tm_mon == birthday.tm_mon && local->tm_mday < birthday.tm_mday)) {
        age--;
    }

    // Affichage de l'âge
    printf("Âge : %d ans\n", age);

    return 0;
}

Ce programme calcule l’âge en soustrayant l’année de naissance de l’année actuelle, ajustant si nécessaire si la date de naissance n’est pas encore passée cette année.

Exemple 3 : Vérification de la validité d’une date saisie par l’utilisateur
#include <stdio.h>
#include <stdbool.h>

// Fonction pour vérifier si une année est bissextile
bool is_leap_year(int year) {
    return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}

// Fonction pour vérifier la validité d'une date
bool is_valid_date(int year, int month, int day) {
    if (year < 0 || month < 1 || month > 12 || day < 1)
        return false;

    int days_in_month[] = {31, 28 + is_leap_year(year), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    return day <= days_in_month[month - 1];
}

int main() {
    int year, month, day;

    // Saisie de la date par l'utilisateur
    printf("Entrez une date (YYYY-MM-DD) : ");
    scanf("%d-%d-%d", &year, &month, &day);

    // Vérification de la validité de la date
    if (is_valid_date(year, month, day)) {
        printf("La date est valide.\n");
    } else {
        printf("La date est invalide.\n");
    }

    return 0;
}

Ce programme demande à l’utilisateur de saisir une date au format “YYYY-MM-DD” et vérifie si la date est valide en tenant compte des années bissextiles.

Ces exemples pratiques démontrent diverses utilisations de la gestion des dates en langage C, allant de l’affichage de la date et de l’heure actuelles à la vérification de la validité des dates saisies par l’utilisateur.

💡Cas particuliers

Reprenons les exemples précédents en les écrivant sous forme de code :

Exemple 1 : Vérification de l’année bissextile
#include <stdio.h>
#include <stdbool.h>

// Fonction pour vérifier si une année est bissextile
bool is_leap_year(int year) {
    return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}

int main() {
    int year;

    // Saisie de l'année par l'utilisateur
    printf("Entrez une année : ");
    scanf("%d", &year);

    // Vérification si l'année est bissextile
    if (is_leap_year(year)) {
        printf("%d est une année bissextile.\n", year);
    } else {
        printf("%d n'est pas une année bissextile.\n", year);
    }

    return 0;
}
Exemple 2 : Vérification de la validité d’une date
#include <stdio.h>
#include <stdbool.h>

// Fonction pour vérifier si une année est bissextile
bool is_leap_year(int year) {
    return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}

// Fonction pour vérifier la validité d'une date
bool is_valid_date(int year, int month, int day) {
    if (year < 0 || month < 1 || month > 12 || day < 1)
        return false;

    int days_in_month[] = {31, 28 + is_leap_year(year), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    return day <= days_in_month[month - 1];
}

int main() {
    int year, month, day;

    // Saisie de la date par l'utilisateur
    printf("Entrez une date (YYYY-MM-DD) : ");
    scanf("%d-%d-%d", &year, &month, &day);

    // Vérification de la validité de la date
    if (is_valid_date(year, month, day)) {
        printf("La date est valide.\n");
    } else {
        printf("La date est invalide.\n");
    }

    return 0;
}
Exemple 3 : Calcul de l’âge à partir de la date de naissance
#include <stdio.h>
#include <time.h>

// Fonction pour calculer l'âge à partir de la date de naissance
int calculate_age(int birth_year, int birth_month, int birth_day) {
    time_t now;
    time(&now);
    struct tm *local = localtime(&now);

    int age = local->tm_year - birth_year;
    if (local->tm_mon < birth_month || (local->tm_mon == birth_month && local->tm_mday < birth_day)) {
        age--;
    }

    return age;
}

int main() {
    int birth_year, birth_month, birth_day;

    // Saisie de la date de naissance par l'utilisateur
    printf("Entrez votre date de naissance (YYYY-MM-DD) : ");
    scanf("%d-%d-%d", &birth_year, &birth_month, &birth_day);

    // Calcul de l'âge
    int age = calculate_age(birth_year, birth_month, birth_day);
    printf("Votre âge est : %d ans\n", age);

    return 0;
}

Ces exemples fournissent du code fonctionnel pour chaque situation et peuvent être utilisés tels quels dans vos programmes en langage C.

Autres articles

Guide : Implémenter get_iemedans des fichiers avec...
La fonction get_iemepermet de récupérer le i-ème élément d'un fichier...
Read more
Guide : Implémenter un Fichier en Tableau...
Les fichiers en tableaux circulaires (ou files d'attente circulaires )...
Read more
Guide : Fichiers en Tableaux Circulaires en...
Les tableaux circulaires (ou buffers circulaires) sont des structures de...
Read more
AZ

Recent Posts

Stock en Transit : Définition, l’Identifier, et le Suivi dans Excel

Le stock en transit, aussi appelé stock en cours de transport, désigne les biens ou…

51 secondes ago

Stock Dormant : Définition, l’Identier et le Suivi en utilisant Excel

Le stock dormant (aussi appelé stock obsolète ou inutilisé) désigne les articles ou les biens…

17 minutes ago

Modèle de Fiche Hebdomadaire de Travail dans Excel

La fiche hebdomadaire de travail est un outil simple mais puissant pour organiser ses tâches,…

58 minutes ago

Modèle de Fiche de Remise de Vêtements de Travail ( à Imprimer)

La gestion des vêtements de travail est essentielle dans de nombreuses entreprises, notamment pour assurer…

1 heure ago

Feuille de Soins en Cas d’Accident de Travail dans Excel ( Imprimable)

Un accident de travail peut survenir à tout moment et nécessite une gestion rapide, organisée,…

1 heure ago

Stock Dormant : Définition, l’Identifier et le Suivre par un Modèle Excel

Le stock dormant (aussi appelé stock obsolète ou inutilisé) désigne les articles ou les biens…

2 heures ago

This website uses cookies.