Bashで現在時刻の1日前の日付を印刷するにはどうすればよいですか?
--date
または-d
オプションGNU日付でのみ利用可能です
Bashで現在時刻の1日前の日付を印刷するにはどうすればよいですか?
--date
または-d
オプションGNU日付でのみ利用可能です
回答:
あなたがGNUの日付を持っていて、私があなたを正しく理解したなら
$ date +%Y:%m:%d -d "yesterday"
2009:11:09
または
$ date +%Y:%m:%d -d "1 day ago"
2009:11:09
date -v-1d
OSX(マイナス)、-v+1d
(プラス)
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(OSX)date
を使用している場合は、次のように実行できます。
date -j -v-1d
Wed Dec 14 15:34:14 CET 2011
または、任意の日付で日付計算を行いたい場合:
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
パッケージから入手できるのGNUバージョンをインストールする必要があります。Homebrewを使用している場合は、を介してインストールできます。brew install coreutils
その後、gdate
コマンドでGNU日付を使用できるようになります。参照:topbug.net/blog/2013/04/14/...
MAC OSX
昨日の日付:
date -v-1d +%F
どこ1dを定義し、現在の日マイナス1日。同様に、
日付-v-1w +%F-前週の日付
日付-v-1m +%F-前月の日付
GNU日付がある場合、
date --date="1 day ago"
詳細:https : //www.cyberciti.biz/tips/linux-unix-get-yesterdays-tomorrows-date.html
代わりにおそらくPerlを使用しますか?
perl -e 'print scalar localtime( time - 86400 ) . "\n";'
または、nawkを使用し、(ab)/ usr / bin / adbを使用します。
nawk 'BEGIN{printf "0t%d=Y\n", srand()-86400}' | adb
出くわしたこの、あまりにも...非常識!
/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
、出力2013-6-1347
結果はですが、予想される結果は2013-6-30
echo $(cal $month $year)|tr ' ' '\n'|tail -n 1
"を試してください
date -d "yesterday" '+%Y-%m-%d'
または
date=$(date -d "yesterday" '+%Y-%m-%d')
echo $date
date: illegal option: -d
Solarisになります。非GNU Solarisプラットフォームに関する質問について、POSIX標準date
ユーティリティへの移植性のないGNU拡張に依存するあなたの答え。
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 アンスガーWiechers
DST対応ソリューション:
タイムゾーンの操作は、クロックを数時間変更するために可能です。夏時間のため、24時間前は今日または昨日の前日になります。
昨日は20または30時間前です。どれ?さて、今日ではない最新のもの。
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コマンドで使用される-eパラメーターはbashで必要ですが、kshでは機能しません。kshでは、-eフラグなしで同じコマンドを使用できます。
スクリプトをさまざまな環境で使用する場合は、#!/ bin / kshまたは#!/ bin / bashでスクリプトを開始できます。\ nを改行で置き換えることもできます。
echo "$(TZ=GMT+30 date +%Y-%m-%d)
$(TZ=GMT+20 date +%Y-%m-%d)" | grep -v $(date +%Y-%m-%d) | tail -1