Comparer 2 dates
Résolu
lefreeman63
Messages postés
136
Date d'inscription
Statut
Membre
Dernière intervention
-
ryko1820 Messages postés 1677 Date d'inscription Statut Membre Dernière intervention -
ryko1820 Messages postés 1677 Date d'inscription Statut Membre Dernière intervention -
Bonjour tous le monde.
Désolé de vous déranger surtout qu'il y a déjà un grand nombre de question ouvert sur la comparaison de date mais la je commence à sécher.
Je cherche en faite à comparer 2 date et à voir si il y a moins de 10 minutes entre les 2. Pour rentrer dans une boucle derrière.
le problème de mes date c'est qu'elles sont sous cette forme:
Une de ces date sera généré avec la commande date et l'autre sera extraite d'une log.
Je suis sur un AIX.
Merci d'avance pour votre aide.
Désolé de vous déranger surtout qu'il y a déjà un grand nombre de question ouvert sur la comparaison de date mais la je commence à sécher.
Je cherche en faite à comparer 2 date et à voir si il y a moins de 10 minutes entre les 2. Pour rentrer dans une boucle derrière.
le problème de mes date c'est qu'elles sont sous cette forme:
Mon Jul 15 10:31:39
Une de ces date sera généré avec la commande date et l'autre sera extraite d'une log.
Je suis sur un AIX.
Merci d'avance pour votre aide.
A voir également:
- Comparer deux date
- Nombre de jours entre deux dates excel - Guide
- Deux ecran pc - Guide
- Comment faire deux colonnes sur word - Guide
- Deux whatsapp sur un téléphone - Guide
- Whatsapp date incorrecte ✓ - Forum Mobile
16 réponses
est-ce que ceci fonctionne ? (Jul == 6, parce que les mois vont de 0 à 11)
$ perl -e 'use Time::Local; print timelocal(39, 31, 10, 15, 6, 2013), "\n";' 1373877099
j'espère qu'il connait les tableaux associatifs
$ ./k1 1373877099 $ $ cat k1 #!/bin/ksh date="Mon Jul 15 10:31:39 $(date +%Y)" mois=([Jan]=0 [Feb]=1 [Mar]=2 [Apr]=3 [May]=4 [Jun]=5 [Jul]=6 [Aug]=7 [Sep]=8 [Oct]=9 [Nov]=10 [Dec]=11) export IFS=" :" ;set -- $date perl -e "use Time::Local; print timelocal($6, $5, $4, $3, ${mois[$2]}, $7), \"\n\";"
Hello,
puissant le ksh ...
j'ai trouvé un petit truc ...
exemple :
./diffdate.ksh "Mon Jul 15 10:31:39" "Sun Jul 15 11:00:39"
il y a 00 h 29 mn et 00 secondes de différence entre les 2 dates
Ok, je l'ai pas inventé :p
Source (en pdf): http://blog.fpmurphy.com/2008/10/ksh93-date-manipulation.html?output=pdf
Quelques autres liens intéressant en rapport avec le sujet, rencontrés en cherchant :
https://docstore.mik.ua/orelly/unix3/korn/ch07_02.htm
https://www.cyberciti.biz/faq/linux-unix-formatting-dates-for-display/
puissant le ksh ...
j'ai trouvé un petit truc ...
# # USAGE: diffdate start-date finish-date # # EXAMPLE: diffdate "Tue, Feb 19, 2008 08:00:02 PM" "Wed, Feb 20, 2008 02:19:09 AM" # # Note: Maximum de 100 heures de différence entre 2 dates ... # SDATE=$(printf '%(%s)T' "$1") FDATE=$(printf '%(%s)T' "$2") DIFF=$(($FDATE-$SDATE)) SECS=$(($DIFF % 60)) MINS=$(($DIFF % (60 * 60) / 60)) HOURS=$(($DIFF / (60 * 60))) printf "il y a %02d h %02d mn et %02d secondes de différence entre les 2 dates\n" $HOURS $MINS $SECS
exemple :
./diffdate.ksh "Mon Jul 15 10:31:39" "Sun Jul 15 11:00:39"
il y a 00 h 29 mn et 00 secondes de différence entre les 2 dates
Ok, je l'ai pas inventé :p
Source (en pdf): http://blog.fpmurphy.com/2008/10/ksh93-date-manipulation.html?output=pdf
Quelques autres liens intéressant en rapport avec le sujet, rencontrés en cherchant :
https://docstore.mik.ua/orelly/unix3/korn/ch07_02.htm
https://www.cyberciti.biz/faq/linux-unix-formatting-dates-for-display/
Salut,
Le plus simple reste de convertir tes dates en "epoch" (man date) et de voir si la différence est supérieure ou non à 600.
Le plus simple reste de convertir tes dates en "epoch" (man date) et de voir si la différence est supérieure ou non à 600.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci beaucoup pour ta réponse.
Effectivement j'y avais pensé mais je dois t'avouer que je n'arrive pas à convertir la date de ma log en epoch :-/
Pour la date courante ces date +%s
Mais pour une date sous ce format je vois pas comment faire
Effectivement j'y avais pensé mais je dois t'avouer que je n'arrive pas à convertir la date de ma log en epoch :-/
Pour la date courante ces date +%s
Mais pour une date sous ce format je vois pas comment faire
Mon Jul 15 10:31:39
hello
essayer en Perl; j'ai rajouté l'année, mais je n'ai pas le bon fuseau horaire (3600s de diff), je cherche.
essayer en Perl; j'ai rajouté l'année, mais je n'ai pas le bon fuseau horaire (3600s de diff), je cherche.
$ perl -e 'use Time::Piece; my $t=Time::Piece->strptime($ARGV[0], "%a %b %d %T %Y"); print $t->strftime("%s\n")' "Mon Jul 15 10:31:39 2013" ; date -d 'Mon Jul 15 10:31:39 2013' +%s 1373880699 1373877099 $
Waou impressionnant la ligne, merci bien.
Mais malheureusement je suis sous un AIX qui n'aime pas l'option -d
:-/
Mais malheureusement je suis sous un AIX qui n'aime pas l'option -d
Can't locate Time/Piece.pm in @INC (@INC contains: /usr/opt/perl5/lib/5.8.8/aix-thread-multi /usr/opt/perl5/lib/5.8.8 /usr/opt/perl5/lib/site_perl/5.8.8/aix-thread-multi /usr/opt/perl5/lib/site_perl/5.8.8 /usr/opt/perl5/lib/site_perl .) at -e line 1. BEGIN failed--compilation aborted at -e line 1. date: illegal option -- d Usage: date [-n][-u] [mmddHHMM[[cc]yy]] [+Field Descriptors] Usage: date [-n][-u] [mmddHHMM[.SS[cc]yy]] [+Field Descriptors] Usage: date [-a] [[+|-]sss.fff]
:-/
oui sa fonctionne :
# perl -e 'use Time::Local; print timelocal(39, 31, 10, 15, 6, 2013), "\n";' 1373877099
Sympa AIX, je vais pas loin en vacance ;p
Nan je déconne .... ;-)
J'ai fait pas mal de RS6000 et on voit pas souvent des questions là dessus ici, mais Dubcheck a déjà donné une soluce qui tient la route ...
Nan je déconne .... ;-)
J'ai fait pas mal de RS6000 et on voit pas souvent des questions là dessus ici, mais Dubcheck a déjà donné une soluce qui tient la route ...
lol surement très vieux étant donné que le version ne marche pas :-/
# ksh --version ksh --version --version: bad option(s)
Pkoi es ce que j'ai l'impression que j'ai pas de chance et qu'il ne connais pas les tableaux associatifs :-(
# cat test.ksh #!/bin/ksh date="Mon Jul 15 10:31:39 $(date +%Y)" mois=([Jan]=0 [Feb]=1 [Mar]=2 [Apr]=3 [May]=4 [Jun]=5 [Jul]=6 [Aug]=7 [Sep]=8 [Oct]=9 [Nov]=10 [Dec]=11) export IFS=" :" ;set -- $date perl -e "use Time::Local; print timelocal($6, $5, $4, $3, ${mois[$2]}, $7), \"\n\";" # ./test.ksh ./test.ksh[3]: syntax error at line 3 : '(' unexpected #
avec un case, alors
#!/bin/ksh date="Mon Jul 15 10:31:39 $(date +%Y)" export IFS=" :" ;set -- $date case $2 in Jan) m=0 ;; Feb) m=1 ;; Mar) m=2 ;; Apr) m=3 ;; May) m=4 ;; Jun) m=5 ;; Jul) m=6 ;; Aug) m=7 ;; Sep) m=8 ;; Oct) m=9 ;; Nov) m=10 ;; Dec) m=11 ;; esac perl -e "use Time::Local; print timelocal($6, $5, $4, $3, $m, $7), \"\n\";"
Merci bien sa avait l'air très jolie mais mon serveur est à chier lol:
# cat test.ksh
#!/bin/ksh
#
# USAGE: diffdate start-date finish-date
#
# EXAMPLE: diffdate "Tue, Feb 19, 2008 08:00:02 PM" "Wed, Feb 20, 2008 02:19:09 AM"
#
# Note: Maximum de 100 heures de différence entre 2 dates ...
#
SDATE=$(printf '%(%s)T' "$1")
FDATE=$(printf '%(%s)T' "$2")
DIFF=$(($FDATE-$SDATE))
SECS=$(($DIFF % 60))
MINS=$(($DIFF % (60 * 60) / 60))
HOURS=$(($DIFF / (60 * 60)))
printf "il y a %02d h %02d mn et %02d secondes de différence entre les 2 dates\n" $HOURS $MINS $SECS
# ./test.ksh "Mon Jul 15 10:31:39" "Sun Jul 15 11:00:39"
./test.ksh[13]: ()T-()T: syntax error
#
# cat test.ksh
#!/bin/ksh
#
# USAGE: diffdate start-date finish-date
#
# EXAMPLE: diffdate "Tue, Feb 19, 2008 08:00:02 PM" "Wed, Feb 20, 2008 02:19:09 AM"
#
# Note: Maximum de 100 heures de différence entre 2 dates ...
#
SDATE=$(printf '%(%s)T' "$1")
FDATE=$(printf '%(%s)T' "$2")
DIFF=$(($FDATE-$SDATE))
SECS=$(($DIFF % 60))
MINS=$(($DIFF % (60 * 60) / 60))
HOURS=$(($DIFF / (60 * 60)))
printf "il y a %02d h %02d mn et %02d secondes de différence entre les 2 dates\n" $HOURS $MINS $SECS
# ./test.ksh "Mon Jul 15 10:31:39" "Sun Jul 15 11:00:39"
./test.ksh[13]: ()T-()T: syntax error
#
Y a du changement :-) :
# cat test.ksh #!/usr/bin/ksh93 # # USAGE: diffdate start-date finish-date # # EXAMPLE: diffdate "Tue, Feb 19, 2008 08:00:02 PM" "Wed, Feb 20, 2008 02:19:09 AM" # # Note: Maximum de 100 heures de différence entre 2 dates ... # SDATE=$(printf '%(%s)T' "$1") FDATE=$(printf '%(%s)T' "$2") DIFF=$(($FDATE-$SDATE)) SECS=$(($DIFF % 60)) MINS=$(($DIFF % (60 * 60) / 60)) HOURS=$(($DIFF / (60 * 60))) printf "il y a %02d h %02d mn et %02d secondes de différence entre les 2 dates\n" $HOURS $MINS $SECS # ./test.ksh ./test.ksh[10]: printf: T: unknown format specifier ./test.ksh[11]: printf: T: unknown format specifier ./test.ksh: line 13: -: more tokens expected #
johand@osiris: ~ $ date "+%s" -d "Mon Jul 15 10:31:39" 1373877099te donne le nombre de secondes depuis l'epoch .
avec GNU coreutils 8.12.197-032bb
Sous AIX , je ne sais pas :(