Expression Régulière Interval de temps

Résolu/Fermé
Maillon Messages postés 156 Date d'inscription mardi 4 octobre 2005 Statut Membre Dernière intervention 15 avril 2011 - 6 mars 2009 à 17:11
Maillon Messages postés 156 Date d'inscription mardi 4 octobre 2005 Statut Membre Dernière intervention 15 avril 2011 - 9 mars 2009 à 17:28
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,

10 réponses

dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
6 mars 2009 à 17:19
hello
utilise le temps en secondes : date +%s
ça simplifie les calculs
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
6 mars 2009 à 17:25
Décidément ;-))
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
6 mars 2009 à 17:24
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]$
;-))
0
Maillon Messages postés 156 Date d'inscription mardi 4 octobre 2005 Statut Membre Dernière intervention 15 avril 2011 5
6 mars 2009 à 17:39
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,
0
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
6 mars 2009 à 18:13
utiliser perl
perl -e 'print time();'
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Maillon Messages postés 156 Date d'inscription mardi 4 octobre 2005 Statut Membre Dernière intervention 15 avril 2011 5
9 mars 2009 à 09:49
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,
0
Maillon Messages postés 156 Date d'inscription mardi 4 octobre 2005 Statut Membre Dernière intervention 15 avril 2011 5
9 mars 2009 à 11:05
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,
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
9 mars 2009 à 11:15
Ben à ce moment là tu le fais manuellement en récupérant l'heure (date +%H:%M) que tu transformes en secondes via bc.
0
Maillon Messages postés 156 Date d'inscription mardi 4 octobre 2005 Statut Membre Dernière intervention 15 avril 2011 5
9 mars 2009 à 11:40
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,
0
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
9 mars 2009 à 11:50
la comande perl -e 'print time();' est l'équivalent de date +%s
rien de plus
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
9 mars 2009 à 11:52
# 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...
0
Maillon Messages postés 156 Date d'inscription mardi 4 octobre 2005 Statut Membre Dernière intervention 15 avril 2011 5
9 mars 2009 à 17:28
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,
0