日付したい(date

$ date
Thu Jan 11 15:11:05 JST 2024

フォーマットしたい(+表示形式

// 年月日
$ date +%Y-%m-%d
20241018

// 年月
$ date +%Y%m
202410

// 週
$ date +%U
41

// 文字列入り
$ date +%U週目
41週目

+表示形式オプションで日付のフォーマットを変更できます。 とても柔軟で、フォーマット指定子のほかに、文字列もそのまま表示できます。

表示内容

指定子

%Y / %y

%m(01-12) / %B / %b / %h

%d(01-31)

%H(00-24) / %I(00-12) / %p(AM/PM)

%M(00-59)

%S(00-59)

曜日

%A / %a / %U / %u(1-7) / %w(0-6)

日数・週数

%j(001-366) / %W(00-52)

タイムゾーン

%z(+09:00) / %Z(JST)

指定子の大文字/小文字と表示内容の対応が覚えにくいので、毎回調べたほうがよいです。

ISO8601形式で出力したい

$ date +%Y-%m-%dT%H:%M:%S%z
2024-10-18T12:02:15+0900

// 空白を含む場合は""で囲む
$ date +"%Y-%m-%d %H:%M:%S%z"
2024-10-18 12:03:42+0900

ISO8601形式で表示したい場合は、自分でフォーマットを指定する必要があります。

Unixtimeで出力したい

$  date +%s
1704953493

+%sオプションでUnix時間(秒)に変換できます。

スクリプトの実行時間を計測したい

1SECONDS=0
2(スクリプトを実行)
3echo "Duration: " $SECONDS

bashには$SECONDSという内部変数があり、スクリプトの実行時間を返してくれます。 スクリプトの冒頭でSECONDS=0して初期化しておきます。

dateコマンドを使いたい場合は、最初と最後にdate +%sでユニックス時間を取得し、その差分を計算すればよいと思います。

日時を設定したい(--set

$ date -s "2024-01-11 15:00:00"
Thu Jan 11 15:00:00 JST 2024

-sオプションで日時を設定できます。

ヒント

Raspberry Piは内部クロックを持たないため、電源をOFFにしている間は時計が止まります。 スマホなどにテザリング接続して、時刻を自動修正することもできますが、 オフライン環境で再起動した場合は、時刻を手動で設定しなおす必要があります。

日付を変換したい(-d

1# Apacheログの日付
2accessed_date="Mon Oct 23 14:23:42.123456 2024"
3
4# "月 日 年 時刻" に並び替える
5parsed_date=$(echo "${accessed_date}" | awk '{print $2 " " $3 " " $6 " " $4}')
6echo ${parsed_date}
7
8# ISO8601形式に変換する
9formatted_date=$(date -d "${parsed_date}" +"%Y-%m-%dT%H:%M:%S")

-dオプションで