Comment puis-je imprimer la date qui est un jour avant l'heure actuelle dans Bash?
--dateou -dn'est disponible qu'en date GNU
Comment puis-je imprimer la date qui est un jour avant l'heure actuelle dans Bash?
--dateou -dn'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-1dsur 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), datevous 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 coreutilspackage, 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 gdatecommande. 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: -dSolaris. Votre réponse qui s'appuie sur des extensions GNU non portables de l' dateutilitaire 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