Bashで現在時刻の1日前の日付を印刷するにはどうすればよいですか?
申し訳ありませんが、Solarisシステムで私について言及していません。そのため、-dateスイッチはSolaris bashでは使用できません。
タイムゾーンを少し工夫するだけで前の日付を取得できることがわかりました。
DATE=`TZ=MYT+16 date +%Y-%m-%d_%r`
echo $DATE
GNU日付があり、正しく理解している場合
$ date +%Y:%m:%d -d "yesterday"
2009:11:09
または
$ date +%Y:%m:%d -d "1 day ago"
2009:11:09
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'
MAC OSX
昨日の日付:
date -v-1d +%F
1dは、現在の日から1日を引いた日を定義します。同様に、
date -v-1w +%F-前の週の日付
date -v-1m +%F-前月の日付
GNU DATEをお持ちの場合、
date --date="1 day ago"
詳細: https://www.cyberciti.biz/tips/linux-unix-get-yesterdays-tomorrows-date.html
まあ、これは遅い答えですが、これはうまくいくようです!!
YESTERDAY=`TZ=GMT+24 date +%d-%m-%Y`;
echo $YESTERDAY;
おそらく代わりにPerlを使用しますか?
Perl -e 'print scalar localtime( time - 86400 ) . "\n";'
または、nawkを使用し、(ab)/ usr/bin/adbを使用します。
nawk 'BEGIN{printf "0t%d=Y\n", srand()-86400}' | adb
this too ...とんでもない!
/usr/bin/truss /usr/bin/date 2>&1 | nawk -F= '/^time\(\)/ {gsub(/ /,"",$2);printf "0t%d=Y\n", $2-86400}' | adb
選択した日付形式が「YYYYMM」の場合、正規表現を使用して単純な計算を行うことができます。
echo $(($(date +"%Y%m") - 1)) | sed -e 's/99$/12/'
2020年1月には201912が返されます;-)ただし、日付に計算オプションや他の日付インタープリターオプション(Perlを使用するなど)が利用できない場合は、回避策になります;-)
#!/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`
昨日の日付をYYYY-MM-DD形式で変数$yesterday
に入れます。
date --date='-1 day'
</ code>
以下のコードを試してください。これは、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'`
コートジー Ansgar 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