Linux(RH 5.3)マシンを持っています
10日と日付を追加/計算する必要があるので、新しい日付(有効期限)を取得します)
例えば
# date
Sun Sep 11 07:59:16 IST 2012
だから私は得る必要があります
NEW_expration_DATE = Sun Sep 21 07:59:16 IST 2012
新しい有効期限の計算方法をアドバイスしてください(bash、ksh、または日付コマンドを操作して?)
-d
切り替えて、計算する日付を指定します
date
Sun Sep 23 08:19:56 BST 2012
NEW_expration_DATE=$(date -d "+10 days")
echo $NEW_expration_DATE
Wed Oct 3 08:12:33 BST 2012
-d, --date=STRING display time described by STRING, not ‘now’
次のようなことができるので、これは非常に強力なツールです。
date -d "Sun Sep 11 07:59:16 IST 2012+10 days"
Fri Sep 21 03:29:16 BST 2012
または
TZ=IST date -d "Sun Sep 11 07:59:16 IST 2012+10 days"
Fri Sep 21 07:59:16 IST 2012
または
prog_end_date=`date '+%C%y%m%d' -d "$end_date+10 days"`
したがって、$ end_date = 20131001の場合、$ prog_end_date = 20131011
「+ x日」をフォーマット文字列として使用できます。
$ date -d "+10 days"
$ date -v -1d
Dateコマンドを使用して1日前の日付を取得するには:
$ date -v -1d
(現在の日付-1)は1日前を意味します。
$ date -v +1d
これにより、(現在の日付+1)は1日後を意味します。
同様に、以下に記述されたコードを「d」の代わりに使用して、年、月などを調べることができます。
y-Year
m-Month
w-Week
d-Day
H-Hour
M-Minute
S-Second
以前の回答として、-d
スイッチのように:
date -d "$myDate + 10 days"
ただし、タイムゾーンに注意する必要があります。
問題が発生する可能性のある例:[2020年3月8日]のタイムゾーンがモントリオールであり、DSTが2:00に開始する[一日の始まり、一日の終わり]のような1日の間隔を取得したい場合:00 am、あなたはできる
startDate=$(date --iso-8601=n -d "8 march 2020 00:00:00.000000001")
endDate=$(date --iso-8601=n -d "$startDate + 1 day")
代わりに
startDate → "2020-03-08T00:00:00,000000001-0500"
endDate → "2020-03-09T00:00:00,000000001-0400"
2020年3月9日の1時間になります
startDate → "2020-03-08T00:00:00,000000001-0500"
endDate → "2020-03-09T01:00:00,000000001-0400"
これを修正するには、次のようにします。
# Returns the difference between two dates' local time offsets. E.g. : "3600" or "- 1800"
getLocalTimeOffsetDiffInSeconds() {
# Get the offset in the following format: -0530 for -05h30min
localOffset1=$(date -d "$1" +%z)
localOffset2=$(date -d "$2" +%z)
# Get the offset in seconds
localOffsetInSec1=$(echo $localOffset1 | sed -E 's/^([+-])(..)(..)/scale=2;0\1(\2 * 3600 + \3 * 60)/' | bc)
localOffsetInSec2=$(echo $localOffset2 | sed -E 's/^([+-])(..)(..)/scale=2;0\1(\2 * 3600 + \3 * 60)/' | bc)
# Compute diff
diffOffsetInSec=$(echo "$localOffsetInSec2 - $localOffsetInSec1" | bc)
# Add a space between the sign and the value, so it can be used by the command "date".
echo "$diffOffsetInSec" | sed -E 's/([+-])(.*)/\1 \2/'
}
startDate=$(date --iso-8601=n -d "8 march 2020 00:00:00.000000001")
endDate=$(date --iso-8601=n -d "$startDate + 1 day")
# Fixes endDate if the DST changed between the two dates.
dstDiff=$(getLocalTimeOffsetDiffInSeconds "$startDate" "$endDate")
# dateFix will be a string to remove the dstDiff from the date in a format
# that can be understood by the command "date". E.g. "3600 seconds" or "- 3600 seconds".
dateFix=$(echo "$(echo "- $dstDiff" | bc | sed -E 's/([+-])(.*)/\1 \2/')")
endDate=$(date --iso-8601=n -d "$endDate $dateFix seconds")