Bash'de şu anki saatten bir gün önce olan tarihi nasıl yazdırabilirim?
--date
Veya -d
opsiyon GNU tarihi kullanılabilir
Bash'de şu anki saatten bir gün önce olan tarihi nasıl yazdırabilirim?
--date
Veya -d
opsiyon GNU tarihi kullanılabilir
Yanıtlar:
GNU tarihiniz varsa ve sizi doğru anladıysam
$ date +%Y:%m:%d -d "yesterday"
2009:11:09
veya
$ date +%Y:%m:%d -d "1 day ago"
2009:11:09
date -v-1d
OSX (eksi), -v+1d
(artı)
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 }
BSD'niz (OSX) date
varsa bunu yapabilirsiniz:
date -j -v-1d
Wed Dec 14 15:34:14 CET 2011
Veya tarih hesaplamalarını keyfi bir tarihte yapmak istiyorsanız:
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
, coreutils
paket aracılığıyla kullanılabilen GNU sürümünü yüklemeniz gerekir . Homebrew kullanıyorsanız, kurabilirsiniz brew install coreutils
, daha sonra gdate
komut aracılığıyla GNU tarihini kullanabilmeniz gerekir . Bkz: topbug.net/blog/2013/04/14/…
MAC OS X
Dünün tarihi için:
date -v-1d +%F
burada 1d , geçerli günü eksi 1 günü tanımlar. Benzer şekilde,
tarih -v-1w +% F - önceki hafta tarihi için
tarih -v-1m +% F - önceki ay tarihi için
GNU TARİHİNİZ VARSA,
date --date="1 day ago"
Daha fazla bilgi: https://www.cyberciti.biz/tips/linux-unix-get-yesterdays-tomorrows-date.html
Gelişmiş Bash komut dosyası kılavuzu
date +%Y:%m:%d -d "yesterday"
Tarih biçimi hakkında ayrıntılar için man sayfasına bakın tarihten
date --date='-1 day'
Solaris sisteminde benden bahsetmediğim için üzgünüm. Bu nedenle, -date anahtarı Solaris bash'de mevcut değildir.
Önceki tarihi saat diliminde küçük bir numarayla alabileceğimi öğrendim.
DATE=`TZ=MYT+16 date +%Y-%m-%d_%r`
echo $DATE
bash $(TZ=America/New_York date +%Y-%m-%d)
Bunun yerine Perl kullanın?
perl -e 'print scalar localtime( time - 86400 ) . "\n";'
Veya nawk kullanın ve (ab) / usr / bin / adb kullanın:
nawk 'BEGIN{printf "0t%d=Y\n", srand()-86400}' | adb
Bu da karşı karşıya geldi ... deli!
/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
, sonuç olan yazdırılmasına 2013-6-1347
beklenen sonuç ise,2013-6-30
echo $(cal $month $year)|tr ' ' '\n'|tail -n 1
" arasındaki 3 satır yerine
Seçilen tarih biçimi 'YYYYMM' ise, normal ifadeyle pim haline getirilmiş basit bir hesaplama yapabilirsiniz:
echo $(($(date +"%Y%m") - 1)) | sed -e 's/99$/12/'
Ocak 2020'de 201912 ;-) döndürecektir. Ancak, tarihte hesaplama seçenekleri ve diğer tarih yorumlayıcı seçenekleri (ör. Perl kullanarak) mevcut değil ;-) sadece bir çözümdür
date -d "yesterday" '+%Y-%m-%d'
veya
date=$(date -d "yesterday" '+%Y-%m-%d')
echo $date
date: illegal option: -d
Solaris ile sonuçlanır . GNU olmayan Solaris platformu hakkında bir soru için POSIX standardı date
yardımcı programa taşınabilir olmayan GNU uzantılarına dayanan cevabınız .
DST parçasına da dikkat eden aşağıdaki kodu deneyin.
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
DST farkında çözüm:
Saat dilimini değiştirmek, saati birkaç saat değiştirmek için mümkündür. Yaz saati uygulaması nedeniyle 24 saat önce bugün veya dünden önceki gün olabilir.
Dünün 20 veya 30 saat önce olduğundan eminsiniz. Hangisi? En sonuncusu bugün değil.
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
Echo komutunda kullanılan -e parametresi bash ile gereklidir, ancak ksh ile çalışmaz. Ksh içinde -e bayrağı olmadan aynı komutu kullanabilirsiniz.
Komut dosyanız farklı ortamlarda kullanıldığında, komut dosyasını #! / Bin / ksh veya #! / Bin / bash ile başlatabilirsiniz. \ N yerine bir satırsonu yazabilirsiniz:
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