- richmikanさんのutconvを使います
- utconvは
YYYYMMDDhhmmss
という形式での入力を要求するが、区切り文字が無い数字の羅列は人間にとって見づらいので、任意の区切り文字付き(YYYY-MM-DD hh:mm:ss
など)で入力したうえで、sedで区切り文字を削っている - 出力もawkで区切り文字を付加している
30分前の時刻を求める
$ echo '2018-06-07 16:46:00' | sed 's/[-: ]//g' | utconv | xargs -IXXX echo "XXX - 30 * 60" | bc | utconv -r | awk '{print substr($0,1,4) "-" substr($0,5,2) "-" substr($0,7,2) " " substr($0,9,2) ":" substr($0,11,2) ":" substr($0,13,2)}'
2018-06-07 16:16:00
30分後の時刻を求める
$ echo '2018-06-07 16:46:00' | sed 's/[-: ]//g' | utconv | xargs -IXXX echo "XXX + 30 * 60" | bc | utconv -r | awk '{print substr($0,1,4) "-" substr($0,5,2) "-" substr($0,7,2) " " substr($0,9,2) ":" substr($0,11,2) ":" substr($0,13,2)}'
2018-06-07 17:16:00