Comment puis-je imprimer la date qui est un jour avant l'heure actuelle dans Bash?
--date
ou -d
n'est disponible qu'en date GNU
Comment puis-je imprimer la date qui est un jour avant l'heure actuelle dans Bash?
--date
ou -d
n'est disponible qu'en date GNU
Réponses:
si vous avez une date GNU 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
date -v-1d
sur OSX (minus), -v+1d
(plus)
date_days_past () { days_past=${1:-0}; if ! date -v-${days_past}d +%Y%m%d 2>/dev/null; then date --date="-${days_past} day" +%Y%m%d; fi }
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 souhaitez effectuer des calculs de date à une date arbitraire:
date -j -v-1d -f "%Y-%m-%d" "2011-09-01" "+%Y-%m-%d"
2011-08-31
date --date='-1 day'
date: illegal option -- -
date
, disponible via le coreutils
package, pour que cette syntaxe fonctionne sur macOS. Si vous utilisez Homebrew, vous pouvez l'installer via brew install coreutils
, après quoi vous devriez pouvoir utiliser la date GNU via la gdate
commande. Voir: topbug.net/blog/2013/04/14/…
MAC OS X
Pour la date d'hier:
date -v-1d +%F
où 1d définit le jour en cours moins 1 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 LA DATE GNU,
date --date="1 day ago"
Plus d'infos: https://www.cyberciti.biz/tips/linux-unix-get-yesterdays-tomorrows-date.html
date +%Y:%m:%d -d "yesterday"
Pour plus de détails sur le format de la date, consultez la page de manuel pour la date
date --date='-1 day'
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
bash $(TZ=America/New_York date +%Y-%m-%d)
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
Je suis tombé sur ça aussi ... fou!
/usr/bin/truss /usr/bin/date 2>&1 | nawk -F= '/^time\(\)/ {gsub(/ /,"",$2);printf "0t%d=Y\n", $2-86400}' | adb
date --date='-1 day'
#!/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 July , 2013
, le résultat en cours d'impression est 2013-6-1347
, alors que le résultat attendu est2013-6-30
echo $(cal $month $year)|tr ' ' '\n'|tail -n 1
"
Vous pouvez faire un calcul simple, enrichi d'une expression régulière, si le format de date choisi est 'AAAAMM':
echo $(($(date +"%Y%m") - 1)) | sed -e 's/99$/12/'
En janvier 2020, il retournera 201912 ;-) Mais, ce n'est qu'une solution de contournement, lorsque la date n'a pas d'options de calcul et d'autres options d'interpréteur de date (par exemple en utilisant perl) non disponibles ;-)
date -d "yesterday" '+%Y-%m-%d'
ou
date=$(date -d "yesterday" '+%Y-%m-%d')
echo $date
date: illegal option: -d
Solaris. Votre réponse qui s'appuie sur des extensions GNU non portables de l' date
utilitaire standard POSIX pour une question sur la plate-forme Solaris non GNU.
Essayez le code ci-dessous, qui s'occupe é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 compatible DST:
La manipulation du fuseau horaire est possible pour changer l'horloge de 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. Laquelle? 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'option -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 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
date +%Y:%m:%d|awk -vFS=":" -vOFS=":" '{$3=$3-1;print}'
2009:11:9