IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 :

[unixtime] Peut-on etre averti quand on passe au jour suivant


Sujet :

C++

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 096
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 096
    Points : 944
    Points
    944
    Par défaut [unixtime] Peut-on etre averti quand on passe au jour suivant
    Bonjour,
    Je travaille sur un projet Arduino et je log mes donner dans un fichier.
    Le fichier log, se trouve dans le dossier 2019, le dossier enfant 11, et le dossier enfant 12. Vous avez compris, sela correspond a l'année, au mois, et au jour.

    A chaque mesure, je fais appel à l'hrloge, pour, ben pour savoir l'heure.
    Je peux donc avoir l'heure sous le format unix, comme par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DateTime now = rtc.now();
    unix_time = now.unixtime();
    Quand il est passé 23:59:59, la valeur de dd, va passer de 11 à 12.

    A partir de unix_time, comment je peux comparer le jour, avec la valeur du moment, qui va changer après 23:53:53 et returner TRUE quand c'est le cas?

    Merci pour vos lumières
    Il ne suffit pas de tout savoir. Vouloir et persévérer, c'est déjà presque tout!

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    Pourquoi voudrais tu te casser la tête

    Comme tu pars sur du DateTime, pourquoi ne pas, tout simplement, garder en mémoire la date de la dernière fois que tu as créé tes différents dossiers et vérifier, à chaque fois que tu veux écrire ton log, si la date courante obtenue est la même que celle de la dernière création

    Je m'explique:

    Vu que tu veux créer un dossier "année" qui contient des dossier "mois" et que ton dossier "mois" dois contenir des dossiers "jours", tu as donc besoin d'extraire l'année, le mois et le jour de ta date courante, si bien que si tu maintient "quelque part" en mémoire ces trois informations, peut être sous une forme aussi simple que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int lastUsedYear;
    int lastUsedMount;
    int lastUsedDay;
    tu pourrais baser ta logique de création des dossiers sur ces valeurs, en lui donnant une forme proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    if(currentYear != lastUsedYear){
        /* créer le dossier de l'année */
        lastUsedYear = currentYear; // pour ne pas essayer de recréer le dossier pour les 365 prochains jours ;)
    }
    /* on entre dans le dossier correspondant à l'année */
    if(currentMount != lastUsedMount){
        /* créer le dossier du mois */
        lastUserMount = currentMount; // pour ne pas essayer de recréer le dossier pour les 30 prochains jours (en moyenne)
    }
    /* on entre dans le dossier du mois courant */
    if(currentDay!= lastUsedDay){
        /* créer le dossier du jour */
        lastUsedDay = currentDay; // pour ne pas essayer de recréer le dossier pour les prochaines 24 heures
    }
    Cela ne te parait il pas beaucoup plus simple
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 096
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 096
    Points : 944
    Points
    944
    Par défaut
    Hello
    Merci pour ta réponse.
    Oui je comprends mais j'aurais du être plus précis, je suis désolé.

    En fait je garde deja dans un variable globale, la derniere fois que la mesure a été prise.

    Je sauve cette valeur dans un int32_t lasttx au format uni time. Il me permet donc de savoir quand la dernière mesure a été prise.
    J'utilise cette variable comme timer afin que les mesures soient prises toutes les X temps.
    Je pensais reprendre la valeur de lasttx pour la comparer avec le moment où la mesure actuel est prise.

    C'est pourquoi je voulais récupérer le jour de la valeur unixtime de lasttx, pour la comparer avec la valeur du moment qui elle aussi sera au format unixtime

    Je m'excuse mais j'aurais du dire ceci avant.
    Il ne suffit pas de tout savoir. Vouloir et persévérer, c'est déjà presque tout!

  4. #4
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Hum, j'aimerais voir un peu le code que tu as déjà écrit, mais, selon moi, ce vers quoi tu devrais sans doute te diriger, c'est:

    1. sauvegarder les informations relatives à la dernière création de dossier, au travers d'une structure tm, soit au travers d'une std::chrono::time_point, ou, mieux encore, au travers d'un std::chrono::year_month_day si ton compilateur le supporte déjà et
    2. d'utiliser un thread séparer qui fonctionnera sous la forme d'une boucle perpétuelle et qui utilisera std::this_thread::sleep_for pour déterminer le moment auquel lancer la nouvelle procédure de logging;

    Car, autrement, il te faudrait en réalité stocker deux informations très semblables, à savoir:
    1. le moment représentant la dernière fois qu'un dossier a été créé et
    2. le moment représentant la dernière fois qu'une procédure de logging a été exécutée

    Il ne me semble, en effet, pas opportun (entre autres, pour une vague raison du respect du SRP ) de vouloir utiliser une seule donnée pour représenter deux informations si dissemblables (bien qu'étant toutes les deux d'un type finalement similaire)
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. peut on etre averti de l'arret d'un service windows
    Par pseudomh dans le forum Windows Serveur
    Réponses: 3
    Dernier message: 07/08/2007, 12h13
  2. [CSS] Changer d'image quand on passe dessus
    Par Trunks dans le forum Mise en page CSS
    Réponses: 13
    Dernier message: 08/12/2005, 22h18
  3. mémoire peut pas etre "read"
    Par zhoom dans le forum C
    Réponses: 7
    Dernier message: 05/11/2005, 11h56
  4. Elément d'un tableau peut-il être reférencé?
    Par scoob67 dans le forum Linux
    Réponses: 9
    Dernier message: 20/10/2005, 18h43
  5. Réponses: 15
    Dernier message: 01/09/2005, 10h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo