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

Web & réseau Delphi Discussion :

Récupération de la date/heure courante via IdDayTime


Sujet :

Web & réseau Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 6
    Par défaut Récupération de la date/heure courante via IdDayTime
    Bonjour à tous,

    Je cherche à récupérer la date/heure courante via un serveur de temps. Pour cela, j'utilise le composant IdDayTime de la librairie Indy avec le code suivant :
    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
    function GetDateHeureCourante : TDateTime;
    var
      DateHeureStr : String;
      an, mois, jour, heure, minute, seconde : integer;
    begin
      IdDayTime1.Host := 'time.nist.gov';
      IdDayTime1.Port := 13;
     
      DateHeureStr := Copy(IdDayTime1.DayTimeStr, 7, 17);
     
      an := 2000 + StrToInt(Copy(DateHeureStr, 1, 2));
      mois := StrToInt(Copy(DateHeureStr, 4, 2));
      jour := StrToInt(Copy(DateHeureStr, 7, 2));
      heure := StrToInt(Copy(DateHeureStr, 10, 2));
      minute := StrToInt(Copy(DateHeureStr, 13, 2));
      seconde := StrToInt(Copy(DateHeureStr, 16, 2));
     
      Result := EncodeDateTime(an, mois, jour, heure, minute, seconde, 0);
     
      IdDayTime1.Disconnect;
    end;
    La plupart du temps, cette fonction me renvoie bien la date/heure courante. Cependant, certaines fois, l'exécution de la fonction s'arrête au niveau de la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateHeureStr := Copy(IdDayTime1.DayTimeStr, 7, 17);
    .
    Je ne sais pas si cela est dû au fait que le serveur time.nist.gov ne réponde pas ou à autre chose.

    Ma question est donc la suivante : existe-t-il un moyen pour que l'exécution du programme ne reste pas bloquée indéfiniment au niveau de la
    ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateHeureStr := Copy(IdDayTime1.DayTimeStr, 7, 17);
    ?
    Si oui, lequel ?

    Merci d'avance de vos réponses.

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    Il s'arrête quelques secondes puis reprend ?
    Si Oui, un AntiFreeze ou alors place le code dans un Thread
    Si Non, blocage définitif, vérifie si tu n'a pas un TimeOut infini, si le blocage dépasse le temps de TimeOut c'est très problématique, lance dans un thread et au bout d'un certains délai le thread principal ou un thread de monitoring Kill le thread de NTP

    D'ailleurs, c'est un simple socket TCP, j'ai voulu le tester via Telnet mais la connexion ne passe pas
    J'ai lu que le NTP était plutôt en UDP, essaye un TIdUdpClient sur le port 123 ou si tu l'as le TIdDayTimeUDP au lieu d'un TIdDayTime
    Essaye aussi le TIdSNTP

    la ligne de commande DOS ne supporte pas très bien non plus ce serveur !
    Code DOS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    C:\Users\...>w32tm /monitor /computers:time.nist.gov
    time.nist.gov[64.113.32.5:123]:
        ICMP: 98ms retard
        NTP: erreur ERROR_TIMEOUT - Aucune réponse du serveur dans 1000ms

    On devrait obtenir un truc du genre

    Code DOS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    C:\Users\...>w32tm /monitor
    blabla[xxx.yyy.www.zzz]:
        ICMP: 0ms retard
        NTP: -0.0177079s Décalage de blabla
            RefID: blabla[xxx.yyy.www.zzz]
            Couche: n

    Depuis où je suis rien ne fonctionne sur 'time.nist.gov', seul fonctionne mon serveur local en SNTP

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    begin
      try
        with TIdDayTime.Create() do
        try
          Host := 'time.nist.gov';
          ConnectTimeout := 6000;
          ReadTimeout := 6000;
          ShowMessage('DayTime TCP ' + DayTimeStr);  // 'time.nist.gov' Time Out ! // local connexion refusée
        finally
          Free();
        end;
      except
        on E: Exception do
          ShowMessage('DayTime TCP ' + E.Message);
      end;
     
      try
        with TIdDayTimeUDP.Create() do
        try
          Host := 'time.nist.gov';
          ReceiveTimeout := 6000;
          ShowMessage('DayTime UDP ' + DayTimeStr); // 'time.nist.gov' Chaine vide // local connexion réinitialisée
        finally
          Free();
        end;
      except
        on E: Exception do
          ShowMessage('DayTime UDP ' + E.Message);
      end;
     
      try
        with TIdSNTP.Create() do
        try
          Host := 'time.nist.gov';
          ReceiveTimeout := 6000;
          ShowMessage('DayTime SNTP ' + DateTimeToStr(DateTime)); //'time.nist.gov' 30/12/1899 // local DayTime SNTP 20/05/2016 11:29:16
        finally
          Free();
        end;
      except
        on E: Exception do
          ShowMessage('DayTime SNTP ' + E.Message);
      end;
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre émérite
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Par défaut
    Bonjour,

    avec ce serveur time-nw.nist.gov ça fonctionne parfaitement
    la réponse est immédiate ... sinon, comme l'a dit ShaiLeTroll, un IdAntiFreeze devrait suffir.

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 6
    Par défaut
    Bonjour à tous,

    J'envoie maintenant les requêtes sur le serveur time-nw.nist.gov et pour l'instant, j'obtiens bien à chaque fois la réponse.
    Je vous remercie tous les deux.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Formulaire : Récupération Date/Heure (hidden ?)
    Par Badr3am dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 27/05/2006, 16h28
  2. récupération date/heure fichier
    Par LeCaméléon dans le forum Delphi
    Réponses: 1
    Dernier message: 23/05/2006, 09h42
  3. [INSERT] Récupération de la date courante
    Par OverCat dans le forum Requêtes
    Réponses: 4
    Dernier message: 01/02/2006, 21h07
  4. [Date/Heure] récupération d'une heure en base
    Par Rayley dans le forum JDBC
    Réponses: 12
    Dernier message: 04/01/2006, 20h34
  5. [XML-XSLT-PHP] Récupération de l'heure courante dans xml
    Par mamat- dans le forum XSL/XSLT/XPATH
    Réponses: 12
    Dernier message: 05/08/2005, 16h02

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