Commande unix - date de la veille
Fermé
defre
-
28 août 2003 à 23:42
Icarenna Messages postés 121 Date d'inscription dimanche 1 avril 2012 Statut Membre Dernière intervention 30 mai 2013 - 14 févr. 2013 à 11:36
Icarenna Messages postés 121 Date d'inscription dimanche 1 avril 2012 Statut Membre Dernière intervention 30 mai 2013 - 14 févr. 2013 à 11:36
Salut a tous,
Je suis débutant, et je cherche a récuperer, pour les besoin d'un script, la date de la veille (jour de la semaine et jour du mois), j'aimerai savoir si c'était possible avec la commande date...
Sinon comment je pourrai la récupérer ?
Merci d'avance pour votre aide
A bientot
Defre
Je suis débutant, et je cherche a récuperer, pour les besoin d'un script, la date de la veille (jour de la semaine et jour du mois), j'aimerai savoir si c'était possible avec la commande date...
Sinon comment je pourrai la récupérer ?
Merci d'avance pour votre aide
A bientot
Defre
A voir également:
- Commande unix - date de la veille
- Invite de commande - Guide
- Écran de veille - Guide
- Commande terminal mac - Guide
- Veille prolongée - Guide
- Mettre en veille un programme - Guide
9 réponses
Jean-François Pillou
Messages postés
19261
Date d'inscription
lundi 15 février 1999
Statut
Webmaster
Dernière intervention
16 février 2023
63 274
29 août 2003 à 00:25
29 août 2003 à 00:25
Essayes voir ce script :
source : http://unix.about.com/library/weekly/aa070901e.htm
#!/bin/sh # ydate: A Bourne shell script that # prints yestarday's date # Output Form: Month Day Year # From Focus on Unix: http://unix.about.com # Set the current month day and year. month=`date +%m` day=`date +%d` year=`date +%Y` # Add 0 to month. This is a # trick to make month an unpadded integer. month=`expr $month + 0` # Subtract one from the current day. day=`expr $day - 1` # If the day is 0 then determine the last # day of the previous month. if [ $day -eq 0 ]; then # Find the preivous month. month=`expr $month - 1` # If the month is 0 then it is Dec 31 of # the previous year. if [ $month -eq 0 ]; then month=12 day=31 year=`expr $year - 1` # If the month is not zero we need to find # the last day of the month. else case $month in 1|3|5|7|8|10|12) day=31;; 4|6|9|11) day=30;; 2) if [ `expr $year % 4` -eq 0 ]; then if [ `expr $year % 400` -eq 0 ]; then day=29 elif [ `expr $year % 100` -eq 0 ]; then day=28 else day=29 fi else day=28 fi ;; esac fi fi # Print the month day and year. echo $month $day $year exit 0
source : http://unix.about.com/library/weekly/aa070901e.htm
Jean-François Pillou
Fondateur de CommentCaMarche.net
Icarenna
Messages postés
121
Date d'inscription
dimanche 1 avril 2012
Statut
Membre
Dernière intervention
30 mai 2013
129
Modifié par Icarenna le 13/02/2013 à 11:15
Modifié par Icarenna le 13/02/2013 à 11:15
Les meilleures de toute les commandes ce sont celles-ci:
Elle fonctionne les années bissextiles, le 01/01/* et le 01/03/* alors moi je dis :
vive linux!!
Car la sagesse procure une protection [tout comme] l'argent procure une protection ; mais l'avantage de la connaissance, c'est que la sagesse garde en vie ses propriétaires. - Eccl. 7:12
date_hier=$(date --date '1 days ago' +%F) date_hier_jour=$(date --date '1days ago' +%d) date_hier_mois=$(date --date '1days ago' +%m) date_hier_annee=$(date --date '1 days ago' +%Y) date_lettre=$(date --date '1 days ago') echo La date en lettre = $date_lettre echo La date de hier m_d_Y = $date_hier echo Le jour de hier= $date_hier_jour echo Le mois de hier= $date_hier_mois echo L\'annee de hier= $date_hier_annee
Elle fonctionne les années bissextiles, le 01/01/* et le 01/03/* alors moi je dis :
vive linux!!
Car la sagesse procure une protection [tout comme] l'argent procure une protection ; mais l'avantage de la connaissance, c'est que la sagesse garde en vie ses propriétaires. - Eccl. 7:12
Nian_nian
Messages postés
1
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
13 février 2013
13 févr. 2013 à 11:30
13 févr. 2013 à 11:30
Suuuuuper!!
Jean-François Pillou
Messages postés
19261
Date d'inscription
lundi 15 février 1999
Statut
Webmaster
Dernière intervention
16 février 2023
63 274
29 août 2003 à 00:02
29 août 2003 à 00:02
Quel genre de script ? Sous quel Unix ?
Si tu as GNU date (sous Linux par exemple), c'est simplissime :
Reste à formatter la sortie selon tes besoins...
Si tu as GNU date (sous Linux par exemple), c'est simplissime :
date -d '1 day ago'
Reste à formatter la sortie selon tes besoins...
Jean-François Pillou
Messages postés
19261
Date d'inscription
lundi 15 février 1999
Statut
Webmaster
Dernière intervention
16 février 2023
63 274
29 août 2003 à 00:05
29 août 2003 à 00:05
Tant qu'on y est :
date -d '1 day ago' +%d\/%m
Jean-François Pillou
Messages postés
19261
Date d'inscription
lundi 15 février 1999
Statut
Webmaster
Dernière intervention
16 février 2023
63 274
29 août 2003 à 00:08
29 août 2003 à 00:08
En fait en relisant ta demande (jour de la semaine/jour du mois) :
Le jour de la semaine est 0 pour dimanche, 1 pour lundi, ... 6 pour samedi. Pour plus d'infos date --help
date -d '1 day ago' +%w\/%d
Le jour de la semaine est 0 pour dimanche, 1 pour lundi, ... 6 pour samedi. Pour plus d'infos date --help
batmat
Messages postés
1871
Date d'inscription
jeudi 1 novembre 2001
Statut
Membre
Dernière intervention
9 janvier 2008
114
>
Jean-François Pillou
Messages postés
19261
Date d'inscription
lundi 15 février 1999
Statut
Webmaster
Dernière intervention
16 février 2023
6 sept. 2003 à 11:41
6 sept. 2003 à 11:41
ou encore plus court avec dater --date='yesterday' :-)
@++
Vous hésitez entre Linux et Windows ?
Vous voulez dépenser du temps ou de l'argent ?
@++
Vous hésitez entre Linux et Windows ?
Vous voulez dépenser du temps ou de l'argent ?
IvyAlice
Messages postés
379
Date d'inscription
lundi 17 septembre 2007
Statut
Membre
Dernière intervention
14 septembre 2013
32
12 févr. 2013 à 18:12
12 févr. 2013 à 18:12
waw au lieu de se fouler à faire un scripte , un simple paramètre suffit, thx
Je sais pas trop qu'elle unix, c'est un script shell sh.
date -d ne marche pas...
date -d ne marche pas...
Jean-François Pillou
Messages postés
19261
Date d'inscription
lundi 15 février 1999
Statut
Webmaster
Dernière intervention
16 février 2023
63 274
29 août 2003 à 00:17
29 août 2003 à 00:17
J'ai changé le titre de ton message pour que tu aies plus facilement des réponses. Que donne un "uname -a" ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
ca donne AIX...
j'ai essayé une commande du type
date "+%d/%m/%Y" --day 1 day ago'
mais ca marche pas non plus
j'ai essayé une commande du type
date "+%d/%m/%Y" --day 1 day ago'
mais ca marche pas non plus
Icarenna
Messages postés
121
Date d'inscription
dimanche 1 avril 2012
Statut
Membre
Dernière intervention
30 mai 2013
129
Modifié par Icarenna le 14/02/2013 à 11:36
Modifié par Icarenna le 14/02/2013 à 11:36
C'est parce que c'est
(un peu en retard...10 ans plus tard...)
date --date '1 days ago' +%F
(un peu en retard...10 ans plus tard...)
compatibilitee totale en une ligne tout unix et unixlike:
>date "+%d %m %y" |awk '{print $1-1" "$2" "$3}'
28 08 03
>date "+%d %m %y" |awk '{print $1-1" "$2" "$3}'
28 08 03
Pitu
Messages postés
1441
Date d'inscription
jeudi 3 octobre 2002
Statut
Contributeur
Dernière intervention
5 janvier 2013
125
29 août 2003 à 14:48
29 août 2003 à 14:48
Sauf si on est le 1er du mois ... ;o(
(:•Þ Pitu
(:•Þ Pitu
Jean-François Pillou
Messages postés
19261
Date d'inscription
lundi 15 février 1999
Statut
Webmaster
Dernière intervention
16 février 2023
63 274
>
Pitu
Messages postés
1441
Date d'inscription
jeudi 3 octobre 2002
Statut
Contributeur
Dernière intervention
5 janvier 2013
29 août 2003 à 15:10
29 août 2003 à 15:10
... et c'est là que tout ce complique, suivant que l'on est en septebmbre, en mai, voire pire en mars, dans une année bissextile ou non....
Pitu
Messages postés
1441
Date d'inscription
jeudi 3 octobre 2002
Statut
Contributeur
Dernière intervention
5 janvier 2013
125
>
Jean-François Pillou
Messages postés
19261
Date d'inscription
lundi 15 février 1999
Statut
Webmaster
Dernière intervention
16 février 2023
29 août 2003 à 15:14
29 août 2003 à 15:14
Et le 1er janvier ? T'as pensé au 1er janvier ... 3000 ?
Sinon, il y a pas un moyen archi-compliqué à partir du "cal" ?
(En tout cas, plus compliqué que les scripts que tu as fournis plus haut)
(:•Þ Pitu
Sinon, il y a pas un moyen archi-compliqué à partir du "cal" ?
(En tout cas, plus compliqué que les scripts que tu as fournis plus haut)
(:•Þ Pitu
Maily, arête de râler !
francoispgp
>
Pitu
Messages postés
1441
Date d'inscription
jeudi 3 octobre 2002
Statut
Contributeur
Dernière intervention
5 janvier 2013
6 sept. 2003 à 14:05
6 sept. 2003 à 14:05
mais c'est la seule commande compatibles entre tous les shells....
la solution est donc si on veut avoir tous les cas pris en compte de travailler depuis le calendrier et non la date.
ainsi il n'existe plus de problemes de ce type.
la solution est donc si on veut avoir tous les cas pris en compte de travailler depuis le calendrier et non la date.
ainsi il n'existe plus de problemes de ce type.
C clair que pour le moment j'utilise le premier script de jeff, car on est sur qu'il gère toutes les possibilité, j'y ai ajouté une petite partie pour le jour en caractère mais là c'est + facile...
on a jamais vu un lundi après un autre jour qu'un dimanche :)
on a jamais vu un lundi après un autre jour qu'un dimanche :)
Script qui gère aussi les années bissextile
# date au format YYYYMMDD
DATE_A_CHARGER=$1
JJ=`echo $DATE_A_CHARGER | cut -c 7-8`
MM=`echo $DATE_A_CHARGER | cut -c 5-6`
YY=`echo $DATE_A_CHARGER | cut -c 1-4`
JJ=$(( JJ - 1 ))
if (( ! "$JJ" ))
then
if "$MM" -eq 1
then
YY=$(( YY - 1))
MM=12
JJ=31
elif
then
JJ=31
MM=$(( MM - 1 ))
elif "$MM" -eq 3
then
MY=$(( YY % 4 ))
"$MY" -eq 0 && JJ=29 || JJ=28
MY=$(( YY % 100 ))
"$MY" -eq 0 && JJ=28
MY=$(( YY % 400 ))
"$MY" -eq 0 && JJ=29
MM=02
elif
then
JJ=30
MM=$(( MM - 1 ))
fi
fi
"${#JJ}" -eq 1 && JJ=0$JJ
"${#MM}" -eq 1 && MM=0$MM
"${#YY}" -eq 1 && YY=0$YY
DATE_A_CHARGER=$YY$MM$JJ
echo $DATE_A_CHARGER
# date au format YYYYMMDD
DATE_A_CHARGER=$1
JJ=`echo $DATE_A_CHARGER | cut -c 7-8`
MM=`echo $DATE_A_CHARGER | cut -c 5-6`
YY=`echo $DATE_A_CHARGER | cut -c 1-4`
JJ=$(( JJ - 1 ))
if (( ! "$JJ" ))
then
if "$MM" -eq 1
then
YY=$(( YY - 1))
MM=12
JJ=31
elif
then
JJ=31
MM=$(( MM - 1 ))
elif "$MM" -eq 3
then
MY=$(( YY % 4 ))
"$MY" -eq 0 && JJ=29 || JJ=28
MY=$(( YY % 100 ))
"$MY" -eq 0 && JJ=28
MY=$(( YY % 400 ))
"$MY" -eq 0 && JJ=29
MM=02
elif
then
JJ=30
MM=$(( MM - 1 ))
fi
fi
"${#JJ}" -eq 1 && JJ=0$JJ
"${#MM}" -eq 1 && MM=0$MM
"${#YY}" -eq 1 && YY=0$YY
DATE_A_CHARGER=$YY$MM$JJ
echo $DATE_A_CHARGER
pour la gestion des années bissextiles :
Définition des années bissextiles, petit rapel :-)
Divisible par 4 mais pas par 100 sauf si divible par 400
ce script passe l'année 2100 qui n'est pas bissextile
Attention les "crochets des if" n'apparaissent pas, on peut pas être bon partout ;-)
Définition des années bissextiles, petit rapel :-)
Divisible par 4 mais pas par 100 sauf si divible par 400
ce script passe l'année 2100 qui n'est pas bissextile
Attention les "crochets des if" n'apparaissent pas, on peut pas être bon partout ;-)
# date au format YYYYMMDD DATE_A_CHARGER=$1 JJ=`echo $DATE_A_CHARGER | cut -c 7-8` MM=`echo $DATE_A_CHARGER | cut -c 5-6` YY=`echo $DATE_A_CHARGER | cut -c 1-4` JJ=$(( JJ - 1 )) if (( ! "$JJ" )) then if "$MM" -eq 1 then YY=$(( YY - 1)) MM=12 JJ=31 elif then JJ=31 MM=$(( MM - 1 )) elif "$MM" -eq 3 then MY=$(( YY % 4 )) "$MY" -eq 0 && JJ=29 || JJ=28 MY=$(( YY % 100 )) "$MY" -eq 0 && JJ=28 MY=$(( YY % 400 )) "$MY" -eq 0 && JJ=29 MM=02 elif then JJ=30 MM=$(( MM - 1 )) fi fi "${#JJ}" -eq 1 && JJ=0$JJ "${#MM}" -eq 1 && MM=0$MM "${#YY}" -eq 1 && YY=0$YY DATE_A_CHARGER=$YY$MM$JJ echo $DATE_A_CHARGER
Apatik
Messages postés
5304
Date d'inscription
mercredi 28 janvier 2009
Statut
Contributeur
Dernière intervention
29 mai 2016
782
30 janv. 2009 à 14:46
30 janv. 2009 à 14:46
Ote moi d'un doute Youpi.. 100 c'est pas divisible par 4? Nan parce que au primaire on m'a dit que ça faisait 25.
Si je ne dis pas de betise, 2008 était bisextile donc 2008, 2012, 2016 et ajoutant 4 à chaque fois, on arrive à 2100. Même que ma calculatrice elle m'a dis que 2100/4 ça faisait 525.
Enfin je dis ça, j'dis rien moi.. J'ai même pas lu les scripts...
Si je ne dis pas de betise, 2008 était bisextile donc 2008, 2012, 2016 et ajoutant 4 à chaque fois, on arrive à 2100. Même que ma calculatrice elle m'a dis que 2100/4 ça faisait 525.
Enfin je dis ça, j'dis rien moi.. J'ai même pas lu les scripts...
pour Apatik
Imposée par la réforme du calendrier grégorien en 1582 afin de tenir compte de la durée de révolution de la Terre autour du Soleil : 365,2422 jours. L’année séculaire n’est bissextile que tous les 400 ans. Seules les années séculaires divisibles par 400 sont bissextiles.
donc 2100, même divisible par 4, n'est pas bissextile car pas divisible par 400...
moi je dis ça je dis rien... :)
Imposée par la réforme du calendrier grégorien en 1582 afin de tenir compte de la durée de révolution de la Terre autour du Soleil : 365,2422 jours. L’année séculaire n’est bissextile que tous les 400 ans. Seules les années séculaires divisibles par 400 sont bissextiles.
donc 2100, même divisible par 4, n'est pas bissextile car pas divisible par 400...
moi je dis ça je dis rien... :)
29 août 2003 à 00:27
source : comp.unix.aix : http://groups.google.fr/groups?hl=fr&lr=&ie=UTF-8&oe=UTF-8&threadm=d1c185ef.0201230015.4078df0%40posting.google.com&rnum=7&prev=/&frame=on
12 févr. 2013 à 16:51
Ainsi que les jours: 01 02 ... 09???