web-dev-qa-db-ja.com

Bashで日付(現在時刻の1日前)を取得する

Bashで現在時刻の1日前の日付を印刷するにはどうすればよいですか?

153
conandor

申し訳ありませんが、Solarisシステムで私について言及していません。そのため、-dateスイッチはSolaris bashでは使用できません。

タイムゾーンを少し工夫するだけで前の日付を取得できることがわかりました。

DATE=`TZ=MYT+16 date +%Y-%m-%d_%r`
echo $DATE
3
conandor

GNU日付があり、正しく理解している場合

$ date +%Y:%m:%d -d "yesterday"
2009:11:09

または

$ date +%Y:%m:%d -d "1 day ago"
2009:11:09
246
ghostdog74

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
47
Jacob Persson
date --date='-1 day'
40
silent

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

10
Maverick

まあ、これは遅い答えですが、これはうまくいくようです!!

     YESTERDAY=`TZ=GMT+24 date +%d-%m-%Y`;
     echo $YESTERDAY;
7
alpana

高度なBashスクリプトガイド

date +%Y:%m:%d -d "yesterday"

日付形式の詳細については、 date のmanページを参照してください

date --date='-1 day'
5
Peter Lindqvist

おそらく代わりに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
3
martin clayton

選択した日付形式が「YYYYMM」の場合、正規表現を使用して単純な計算を行うことができます。

echo $(($(date +"%Y%m") - 1)) | sed -e 's/99$/12/'

2020年1月には201912が返されます;-)ただし、日付に計算オプションや他の日付インタープリターオプション(Perlを使用するなど)が利用できない場合は、回避策になります;-)

1
Sven
#!/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
medoix
yesterday=`date -d "-1 day" %F`

昨日の日付をYYYY-MM-DD形式で変数$yesterdayに入れます。

1
Heinzi
date --date='-1 day'
 </ code>
1
DigitalRoss

以下のコードを試してください。これは、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

0
misguided

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
0
Walter A