Obtenez la date (un jour avant l'heure actuelle) dans Bash

Comment puis-je imprimer la date qui est un jour avant l'heure actuelle dans Bash?

131
demandé sur martin clayton 2009-11-10 13:12:23

15 réponses

Si vous avez GNU date et que je vous ai bien compris

$ date +%Y:%m:%d -d "yesterday"
2009:11:09

Ou

$ date +%Y:%m:%d -d "1 day ago"
2009:11:09
217
répondu ghostdog74 2009-11-10 10:17:09

Si vous avez BSD (OSX) date Vous pouvez le faire comme ceci:

date -j -v-1d
Wed Dec 14 15:34:14 CET 2011

Ou si vous voulez faire des calculs de date sur une date arbitraire:

date -j -v-1d -f "%Y-%m-%d" "2011-09-01" "+%Y-%m-%d"
2011-08-31
41
répondu Jacob Persson 2011-12-15 14:34:36
date --date='-1 day'
36
répondu silent 2009-11-10 10:17:18

Eh Bien c'est une réponse tardive,mais cela semble fonctionner!!

     YESTERDAY=`TZ=GMT+24 date +%d-%m-%Y`;
     echo $YESTERDAY;
7
répondu alpana 2013-06-04 09:02:34

Guide de script Bash avancé

date +%Y:%m:%d -d "yesterday"

Pour plus de détails sur le format de date, voir la page de manuel de date

date --date='-1 day'
4
répondu Peter Lindqvist 2009-11-10 10:19:58

MAC OSX

Pour la date d'hier:

date -v-1d +%F

1d définit le jour courant moins 1 jour. De même,

Date -v-1w +%F - pour la semaine précédente date

Date-v-1m + % f - pour la date du mois précédent

SI VOUS AVEZ UNE DATE GNU,

date --date="1 day ago"

Plus d'informations: https://www.cyberciti.biz/tips/linux-unix-get-yesterdays-tomorrows-date.html

4
répondu Maverick 2017-08-18 19:10:02

Utiliser Perl à la place peut-être?

perl -e 'print scalar localtime( time - 86400 ) . "\n";'

Ou, utilisez nawk et (ab)utilisez / usr / bin/adb:

nawk 'BEGIN{printf "0t%d=Y\n", srand()-86400}' | adb

Est tombé sur CE aussi ... fou!

/usr/bin/truss /usr/bin/date 2>&1 | nawk -F= '/^time\(\)/ {gsub(/ /,"",$2);printf "0t%d=Y\n", $2-86400}' | adb
3
répondu martin clayton 2009-11-10 22:24:21

Désolé de ne pas mentionner I sur le système Solaris. En tant que tel, le commutateur-date n'est pas disponible sur Solaris bash.

Je découvre que je peux obtenir la date précédente avec un petit truc sur le fuseau horaire.

DATE=`TZ=MYT+16 date +%Y-%m-%d_%r`
echo $DATE
3
répondu conandor 2009-11-11 02:16:44
yesterday=`date -d "-1 day" %F`

Met la date d'hier au format AAAA-MM-JJ dans la variable $yesterday.

1
répondu Heinzi 2009-11-10 10:19:07
#!/bin/bash
OFFSET=1;
eval `date "+day=%d; month=%m; year=%Y"`
# Subtract offset from day, if it goes below one use 'cal'
# to determine the number of days in the previous month.
day=`expr $day - $OFFSET`
if [ $day -le 0 ] ;then
month=`expr $month - 1`
if [ $month -eq 0 ] ;then
year=`expr $year - 1`
month=12
fi
set `cal $month $year`
xday=${$#}
day=`expr $xday + $day`
fi
echo $year-$month-$day
1
répondu medoix 2009-11-10 10:27:09

date --date='-1 day'

1
répondu DigitalRoss 2011-11-18 00:55:52

Essayez le code ci-dessous , qui prend également en charge la partie DST.

if [ $(date +%w) -eq $(date -u +%w) ]; then
  tz=$(( 10#$gmthour - 10#$localhour ))
else
  tz=$(( 24 - 10#$gmthour + 10#$localhour ))
fi
echo $tz
myTime=`TZ=GMT+$tz date +'%Y%m%d'`

Courtsey Ansgar Wiechers

0
répondu misguided 2017-05-23 12:10:47

Solution consciente DST:

La manipulation du fuseau horaire est possible pour changer l'horloge quelques heures. En raison de l'heure d'été, il y a 24 heures peut être aujourd'hui ou avant-hier.

Vous êtes sûr qu'hier c'est il y a 20 ou 30 heures. Lequel? Eh bien, le plus récent qui n'est pas aujourd'hui.

echo -e "$(TZ=GMT+30 date +%Y-%m-%d)\n$(TZ=GMT+20 date +%Y-%m-%d)" | grep -v $(date +%Y-%m-%d) | tail -1

Le paramètre-e utilisé dans la commande echo est nécessaire avec bash, mais ne fonctionnera pas avec ksh. Dans ksh, vous pouvez utiliser la même commande sans l'indicateur-E.

Lorsque votre script sera utilisé dans différents environnements, vous pouvez démarrer le script avec #!/bin/ksh #ou!/bin/bash. Vous pouvez également remplacer le \ N par un retour à la ligne:

echo "$(TZ=GMT+30 date +%Y-%m-%d)
$(TZ=GMT+20 date +%Y-%m-%d)" | grep -v $(date +%Y-%m-%d) | tail -1
0
répondu Walter A 2014-03-12 12:50:58

Pas très sexy mais pourrait faire le travail:

perl -e 'my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time - 86400);$year += 1900; $mon+= 1; printf ("YESTERDAY: %04d%02d%02d \n", $year, $mon, $mday)'

Formaté à partir de la réponse" martin clayton".

0
répondu trox 2018-03-19 15:12:39
date +%Y:%m:%d|awk -vFS=":" -vOFS=":" '{$3=$3-1;print}'
2009:11:9
-1
répondu Vijay 2009-11-10 10:50:05