Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

timestamp au 01/01


Sujet :

C

  1. #1
    Membre régulier
    timestamp au 01/01
    Bonjour,
    Petit soucis d'heure local.
    Je cherche à obtenir le timestamp au 01/01 00h00,00 de l'année en cours.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    #include <time.h> 
    #include <stdio.h>
    #include <errno.h>
    #include <string.h>
    #include <stdlib.h>
    int main()
    {
    time_t t = time(NULL);
    struct tm tm = *localtime(&t);
    tm.tm_mday = 1;
    tm.tm_mon = 0;  
    tm.tm_hour = 0;
    tm.tm_min = 0;
    tm.tm_sec = 0; 
    time_t timestamp_annee = mktime(&tm);
    printf("timestamp_annee = %ld\n",timestamp_annee);
     
    return(0);


    Cela me donne :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    timestamp_annee = 1577829600

    soit le 31/12/2019 - 23:00:00 (http://www.timestamp-tool.fr/)
    J'ai donc une petite heure de différence en cette saison (vivement la fin du changement d'heure :-)

    Merci

  2. #2
    Rédacteur/Modérateur

    Citation Envoyé par http://www.timestamp-tool.fr/
    Le timestamp représente la quantité de secondes passés depuis le premier janvier de l'année 1970 (début de l'heure UNIX), autrement dit, le timestamp (unix) est le nombre de secondes écoulées depuis le 1er Janvier 1970 à minuit UTC
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre averti
    Salut,

    Si on ajoute à ton code un affichage de ta struct tm formatée avec asctime après que tu aies appelé mktime, comme ceci :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #include <time.h>
    #include <stdio.h>
    #include <errno.h>
    #include <string.h>
    #include <stdlib.h>
    int main()
    {
        time_t t = time(NULL);
        struct tm tm = *localtime(&t);
        tm.tm_mday = 1;
        tm.tm_mon = 0;
        tm.tm_hour = 0;
        tm.tm_min = 0;
        tm.tm_sec = 0;
        time_t timestamp_annee = mktime(&tm);
        printf("timestamp_annee = %ld\n",timestamp_annee);
        printf("formatage asctime: %s\n", asctime(&tm));
     
        return(0);
    }


    J'obtiens sur ma machine :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ gcc -Wall sebaaas.c
    $ ./a.out 
    timestamp_annee = 1577829600
    formatage asctime: Tue Dec 31 23:00:00 2019


    Selon le standard tu C, struct tm contient un champ tm_isdst qui peut être mis à une valeur négative, pour forcer mktime à tenter de déterminer si l'heure d'été ou d'hivers est en vigueur à la date et heure spécifiée.

    Avec ce code :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #include <time.h>
    #include <stdio.h>
    #include <errno.h>
    #include <string.h>
    #include <stdlib.h>
    int main()
    {
        time_t t = time(NULL);
        struct tm tm = *localtime(&t);
        tm.tm_mday = 1;
        tm.tm_mon = 0;
        tm.tm_hour = 0;
        tm.tm_min = 0;
        tm.tm_sec = 0;
        tm.tm_isdst = -1;
        time_t timestamp_annee = mktime(&tm);
        printf("timestamp_annee = %ld\n",timestamp_annee);
        printf("formatage asctime: %s\n", asctime(&tm));
     
        return(0);
    }


    J'obtiens alors :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ gcc -Wall sebaaas.c
    $ ./a.out 
    timestamp_annee = 1577833200
    formatage asctime: Wed Jan  1 00:00:00 2020


    (testé sur Linux Debian Buster, avec gcc 8.3.0 et système réglé sur TZ Europe/Paris)

  4. #4
    Membre régulier
    Parfait !

    Merci baucoup

###raw>template_hook.ano_emploi###