シェルスクリプト日付関連まとめ(linux)

日付周りがググってもいい情報が見つからなかったのでめも
GNU dateが使用可能であることが前提





現在日付取得

# 結果 2015年  9月 14日 月曜日 17:00:11  JST
date


フォーマット指定

date +"format"で指定
+の位置は""の内と外どっちもいける?
# 結果 2015/09/14 17:09:48
date +"%Y/%m/%d %H:%m:%S"

# 結果 2015年09月14 17時09分48秒
date +"%x %X"

以下フォーマット
そこそこ自由は利く模様

%Y 年
%m 月
%d 日
%H 時
%m 分
%S 秒
%w 週(日,月... 0,1...)
%F yyyy-MM-dd
%D yy/MM/dd
%T HH:mm:ss
%x yyyy年MM月dd日(ロケールの日付表現)
%X HH時mm分ss秒(ロケールの時間表現)


オプション -d で文字列から日付へ変換したり日付の加減算が可能

date "d yyyyMMdd"
環境にもよると思うがわりと融通が利く模様
yyyy/MM/dd
yyyy-MM-dd
yyyyMMdd
形式なら変換可能だった
# 結果 2015年  9月  13日  日曜日  18:53:35 JST
date "d 2015/02/01"


指定した文字列から、日付を加減算して取得する処理

これを知りたかった!!
文字列"2010/03/02"から一年引いて二ヶ月足して五日引いてみた例
# 結果 2009/04/27
date "-d 2010/03/02 1 year ago 2 months 5 days ago" "+%Y%m%d"


せっかくなので月末日の取得処理も書いとく

2024/06/30 の月末日を取得した例
# 結果 2024-06-30
dt="2024/06"
echo `date "-d $dt/01 1 months 1 days ago" "+%F"`

手順としては年月を変数に持たして"+01"をくっつけて1ヶ月後の1日前を計算している感じです。
スラなしの方法が思いつきませんでした。

2015年9月14日月曜日