Expression Régulière Interval de temps

Résolu
Bonjour,

Voilà je récupère l'heure d'une machine et j'aimerai la comparer à l'heure d'une autre machine. Jusque là ça va (lol).

Par contre j'aimerai dire que les heures sont les mêmes si il y a maximum 15 min d'écart entre les deux machines (minutes en plus ou en moins).
Donc par exemple si il est 18h35 sur la machine A et 18h25 sur la machine B bah que la sortie soit "les deux machines sont à la même heure".

Par contre il faudrait qu'il gère aussi le changement d'heure et tout ça en bash.

Et tout ça malheureusement c'est trop compliqué pour moi.
Je vais essayer de faire quelque chose mais c'est pas gagné.

Quelqu'un aurait-il une idée ?

Merci beaucoup.

Cordialement,
Configuration: Windows XP
Firefox 2.0.0.20

10 réponses

  1. Contributeur
    hello
    utilise le temps en secondes : date +%s
    ça simplifie les calculs
    1. Modérateur
      Décidément ;-))
  2. Modérateur
    Salut,

    Utilises le format "EPOCH" de la commande "date" (man date, info date) et compare les valeurs retournées :
    [tmpfs]$ date --date='1970-01-01 18:35' +%s
    63300
    
    [tmpfs]$ date --date='1970-01-01 18:25' +%s
    62700
    
    [tmpfs]$
    ;-))
    1. Merci à vous deux, cependant deux soucis à ça :

      d'une part je suis sous SunOS et la commande de jipicy ne marche pas. Le %s n'est pas reconnu apparement.

      d'autre part il faut que je compare les deux valeurs (que j'arrive pas à avoir) et que je fasse un c'est égal + ou - à ça. Seulement je sais pas comment faire ça.

      Cordialement,
      1. Merci dubcek mais je préfèrerai savoir le faire en shell, je pense que c'est possible en utilisant une expression régulière mais j'arrive pas à trouver laquelle.

        Je vais continuer à chercher.

        Merci de votre aide.

        Cordialement,
        1. En fait il faudrait que je convertisse la date actuelle en seconde (je la met dans une variable $a) puis je convertis 15 min en seconde (dans une variable $b) puis je fais :

          si $A est compris entre A+B ou A-B alors OK sinon KO.

          Voilà seulement ya un hic c'est que l'option %s (qui permet de convertir une date en seconde) ne marche pas sous sunOs apparement.

          Cordialement,
          1. Modérateur
            Ben à ce moment là tu le fais manuellement en récupérant l'heure (date +%H:%M) que tu transformes en secondes via bc.
        2. Merci jipicy pour ta réponse ;-)

          J'ai regarder la commande bc et ça à l'air d'être un truc de pas mal .... quand tu sais l'utiliser mais franchement j'y comprends absolument rien à cette commande.

          Je continue à essayer de comprendre mais est ce que tu aurais des exemples qui se rapprochent de ce que je souhaite pour que je puisse comprendre un peu mieux ?

          Merci.

          Cordialement,
          1. Contributeur
            la comande perl -e 'print time();' est l'équivalent de date +%s
            rien de plus
            1. Modérateur
              # On récupère l'heure
              jp@MDK:~/tmpfs ssh$ DATE=$(date +%H:%M)
              # On vérifie
              jp@MDK:~/tmpfs ssh$ echo ${DATE}
              11:41
              # on affiche que les heures
              jp@MDK:~/tmpfs ssh$ echo ${DATE%:*}
              11
              # on affiche que les minutes
              jp@MDK:~/tmpfs ssh$ echo ${DATE#*:}
              41
              # on calcule les secondes (nbre heures X 3600) + (nbre minutes X 60)
              jp@MDK:~/tmpfs ssh$ echo "(${DATE#*:} * 3600) + (${DATE%:*} * 60)" | bc
              148260
              # ça c'est les 15 minutes de battements en secondes
              jp@MDK:~/tmpfs ssh$ echo "15 * 60" | bc
              900
              
              jp@MDK:~/tmpfs ssh$
              Je te laisse calculer l'intervalle...
              1. En fait j'ai trouvé une autre solution plus compliqué mais que je comprends tout le temps lol :-)

                Là voilà :
                # heure de la machine maître
                heure1=`date +%H`
                minute1=`date +%M`
                seconde1=`date +%S` h1=`expr $heure1 \* 3600`
                m1=`expr $minute1 \* 60`
                hm1=`expr $h1 + $m1`
                date1=`expr $hm1 + $seconde1`

                # heure de la machine distante
                heure2=`date +%H`
                minute2=`date +%M`
                seconde2=`date +%S` h2=`expr $heure2 \* 3600`
                m2=`expr $minute2 \* 60`
                hm2=`expr $h2 + $m2`
                date2=`expr $hm2 + $seconde2`

                # 15 min c'est 900 secondes donc :
                interval=900
                bipplus=`expr $date1 + $interval`
                bipmoins=`expr $date1 - $interval`

                if ( [ $date2 -le $bipplus ] && [ $date2 -ge $bipmoins ] )
                then
                echo "ok";
                else
                echo "ko";
                fi

                Je vais essayer de faire un code plus propre avec la méthode de jipicy. Par contre le perl c'est pas encore pour moi même si je m'y met un peu j'aime pas trop l'utiliser encore mais merci quand même dubcek.

                En tout cas merci jipicy et dubcek pour votre aide qui me sera utile à l'avenir.

                Cordialement,