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

VB.NET Discussion :

Erreur ajout seconde à une heure


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    autre
    Inscrit en
    Septembre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : autre
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2015
    Messages : 35
    Par défaut Erreur ajout seconde à une heure
    Bonjour,

    je viens vers vous pour vous exposer un petit souci.

    J'ai deux labels.
    Dans le premier une date au format 01/12/2000 et dans l'autre une heure au format 12:12:12

    La date et l'heure peuvent être différentes de la date et heure du PC;


    Dans un sub (liée à nouveau thread ouvert dans la load de ma form) Je fais ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Invoke(New MethodInvoker(Sub() Monlabel.Text = (CDate(Monlabel.text)).AddSeconds(1)))
    Pour passer de 23:59:59 à 00:00:00, mon label prend la valeur 02/01/0001.

    Soit, je fais donc ça (c'est pas beau...):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Try 
     
    If Monlabel.Text = "02/01/0001" Then
    Invoke(New MethodInvoker(Sub() Monlabel.Text = "00:00:00"))
    Invoke(New MethodInvoker(Sub() MonlabelDate.Text =(CDate(MonlabelDate.text)).AddDays(1)))
    End If
    Catch ex As Exception
     
    End Try
    Thread.Sleep(1000)
    Sur mon PC (Windows 7) aucun problème. La date prend un jour et l'heure est à 00:00:00.

    Sur un autre PC (Windows 10) cela ne fonctionne pas comme le catch ne prenait pas l'erreur.

    Auriez-vous une idée? Et surtout auriez-vous une idée de faire plus propre via un Thread et non un timer.

    Je vous remercie!!

    Bien cordialement,

    Innuendo67.

  2. #2
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bonjour,

    Je voudrais bien avoir une idée ... mais je ne comprends pas ton programme ...

    De un, je ne comprends pas cette approche "multithread" dans ce cas. Je n'ai pas besoin de cela pour ajouter un temps à un temps.
    De deux, If Monlabel.Text = "02/01/0001" Then .... Monlabel.Text = "00:00:00".... Pour moi, cela signifie que si la date est cette valeur improbable, alors tu remets l'heure à zéro.

    Mais avec ces considérations, je ne comprends pas le contexte de ta demande et je ne vois pas comment faire un exemple d'ajout d'une seconde à une heure donnée ...

    Je ne suis sans doute pas seul à ne pas te comprendre. Peut-être qu'avec davantage d'explications, quelqu'un pourra t'aider.


  3. #3
    Membre averti
    Homme Profil pro
    autre
    Inscrit en
    Septembre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : autre
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2015
    Messages : 35
    Par défaut
    Bonjour Phil Rob et merci pour votre réponse!

    je vais essayer de faire plus clair.

    c'est un programme qui réalise des actions à une date et une heure précise.
    Mes deux labels représente la date et l'heure de mon logiciel.
    Ces dernières ne sont pas forcément "la bonne date et heure" du jour.

    Je lance un thread pour ajouter une seconde "toutes les secondes" à la date et heure de mon logiciel.

    Je ne veux pas appeler "Now" car la date et heure peuvent être totalement différentes de Now.


    Arrivé à 23:59:59 + une seconde, la date (normalement un jour de plus) prend la forme de 02/01/0001.

    Donc je code pour que si la date à cette valeur alors l'heure est égale à 00:00:00 et la date prend un jour de plus.

    Exemple:

    12/01/2021 23:59:59 + une seconde devrait être égale à 13/01/2021 00:00:00 sauf que la date prend la valeur 02/01/0001.

    J'espère avoir été plus clair...

    Merci!

    Cordialement,

    Innuendo67.

  4. #4
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Cela me parait plus clair en effet.

    Je vais tenter quelques essais.

    Pourquoi ne te contentes-tu pas d'un Timer dont l'interval serait réglé à 1000 (soit un Tick par seconde) dans l'événement Tick duquel tu ajouterais la seconde ?
    A quoi bon s'embarasser du multithread pour une simple addition de secondes ?

    ...

  5. #5
    Membre averti
    Homme Profil pro
    autre
    Inscrit en
    Septembre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : autre
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2015
    Messages : 35
    Par défaut
    Merci!

    le thread.Sleep est pour moi plus précis qu'un timer.Tick.

    De plus, j'ai déjà des Timers dans mon application (calcul de fin d'action sonore...)

    Merci encore de votre réponse. Ce qui me chagrine c'est que cela fonctionne sur mon PC de dév (Windows 7) mais pas sur un 10...
    Bref..

    Merci!

  6. #6
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Pas de chance, j'ai déjà fait un test avec Timer avant de lire ta réponse. Je tâcherai d'en faire un autre avec Thread.Sleep, mais je n'ai plus de temps aujourd'hui.

    Je t'envoie quand même ce que j'ai fait car tu y puiseras peut-être la bonne idée ...

    Mon idée est de travailler avec une variable de type Date unique pour la date et l'heure de départ, et une autre pour la date et l'heure actuelle. L'affichage de dates et heures dans des zones de textes distinctes ne devant pas intervenir dans les calculs.

    Voici la video de mon test : https://www.dropbox.com/s/okgdey9rt5...ondes.mp4?dl=0

    Et voici mon projet de test sue lequel tu peux modifier : AjoutSeconde.zip

    Bonne soirée ...

  7. #7
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Voici une version asynchrone.
    La video : https://www.dropbox.com/s/nbfs305hei...once2.mp4?dl=0
    Le projet de test : AjoutSeconde2.zip.

    Il existe d'autres manières de programmer l'asynchrone, ceci n'est qu'un exemple. Si j'ai un peu temps dans l'après midi, je continuerai un test de programmation multithread.

    Mais un défaut qui apparaît (cela se voit dans la video) est que la mise en action des codes asynchrone demande un délai, il y a un "retard à l'allumage". Ce retard sea moindre en programmation multithread, mais il en existera un aussi.
    Ces retards n'existent pas avec la programmation synchrone. C'est pourquoi je me demande si ton hypothétique gain de précision avec le Thread.Sleep n'est pas largement perdu avec le retard de démarrage des codes sous Asynchrone ou MultiThreading.
    Je crois que ces programmations s'imposent pour des traitements longs qui ne doivent pas bloquer le programme principal pendant leur exécution. Une addition de secondes est un traitement très court.

    Bref, si j'obtiens une version multithread pertinente, je te l'enverrai.

    ...

  8. #8
    Membre averti
    Homme Profil pro
    autre
    Inscrit en
    Septembre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : autre
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2015
    Messages : 35
    Par défaut
    Bonjour et tout d'abord désolé de mon délai de reconnection à ce site...

    Je vais regarder plus précisemment vos réponses!

    Merci encore et veuillez m'excuser du retard de ma réponse...




    Bien cordialement,


    Innuendo67

Discussions similaires

  1. [XL-2013] Ajouter une heure à une date + heure avec width erreur 13
    Par Denis_67 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/11/2018, 19h07
  2. Réponses: 4
    Dernier message: 02/02/2018, 09h57
  3. ajout de deux heures dans une date
    Par chris401 dans le forum Access
    Réponses: 2
    Dernier message: 29/06/2006, 08h04
  4. Erreur lors d'une requête d'ajout
    Par olivia.of dans le forum Access
    Réponses: 13
    Dernier message: 14/02/2006, 12h18
  5. Erreur lors de l'ajout d'une table
    Par FredMines dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 27/07/2005, 13h13

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