Comment puis-je imprimer la date qui est un jour avant l'heure actuelle dans Bash?
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
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
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 à une date quelconque:
date -j -v-1d -f "%Y-%m-%d" "2011-09-01" "+%Y-%m-%d"
2011-08-31
date --date='-1 day'
MAC OSX
Pour la date d'hier:
date -v-1d +%F
où 1d définit le jour actuel moins un jour. De même,
date -v-1w +% F - pour la date de la semaine précédente
date -v-1m +% F - pour la date du mois précédent
SI VOUS AVEZ GNU DATE,
date --date="1 day ago"
Plus d'infos: https://www.cyberciti.biz/tips/linux-unix-get-yesterdays-tomorrows-date.html
C'est une réponse tardive, mais cela semble fonctionner!
YESTERDAY=`TZ=GMT+24 date +%d-%m-%Y`;
echo $YESTERDAY;
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'
Utilisez 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
Entré à travers cela aussi ... fou!
/usr/bin/truss /usr/bin/date 2>&1 | nawk -F= '/^time\(\)/ {gsub(/ /,"",$2);printf "0t%d=Y\n", $2-86400}' | adb
Vous pouvez faire un calcul simple, avec une regex, si le format de date choisi est 'AAAAMM':
echo $(($(date +"%Y%m") - 1)) | sed -e 's/99$/12/'
En janvier 2020, il renverra 201912 ;-) Mais ce n’est qu’une solution de contournement, lorsque la date n’a pas d’options de calcul et que d’autres options d’interprétation de date (par exemple, en utilisant Perl) ne sont pas disponibles ;-)
#!/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
yesterday=`date -d "-1 day" %F`
Place la date d'hier au format AAAA-MM-JJ dans la variable $yesterday
.
date --date='-1 day'
</ code>
Essayez le code ci-dessous, qui traite également de 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
Solution sensible à l'heure d'été:
La manipulation du fuseau horaire est possible pour changer l'horloge de quelques heures. En raison de l'heure d'été, il peut y avoir 24 heures aujourd'hui ou avant-hier.
Vous êtes sûr qu'hier, il y a 20 ou 30 heures. Laquelle? Eh bien, le plus récent 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. En ksh, vous pouvez utiliser la même commande sans l'indicateur -e.
Lorsque votre script sera utilisé dans différents environnements, vous pouvez le démarrer avec #!/Bin/ksh ou #!/Bin/bash. Vous pouvez également remplacer le\n par une nouvelle ligne:
echo "$(TZ=GMT+30 date +%Y-%m-%d)
$(TZ=GMT+20 date +%Y-%m-%d)" | grep -v $(date +%Y-%m-%d) | tail -1