[言語別TIME処理] Shellで時間処理

clock-95330_1280
LINEで送る
Share on GREE
Share on LinkedIn

Shell言語における時間処理は、「date」コマンドを使います。
ちなみに、「time」コマンドは、コマンド実行の時間計測用の為、少し用途が違うので、間違えないようにしましょう。

時間操作の要件

  1. 1900年からの秒数(UnixTime)
  2. sleep処理
  3. 1番からYmdHisの取得(曜日含む)
  4. YmdHisから1番の取得
  5. ミリ秒の取得
  6. 本プログラムの経過秒数

ソース

実行

解説

ミリ秒の取得

過去にブログ記事を書いているので、詳細はそちらを御覧ください。
ターミナルコマンドの「date」でミリ秒を表示するまでの道のり
shellではナノ秒という形で取得できますが、一般的なマイクロ秒の3桁を出すのは以下の書き方です。

コマンド実行時間

今回のプログラムのstartとendの差分が経過秒数になりますが、timeコマンドを使ってほぼ同値で有ることも確認できるので、同時に行いました。

Unix-Timeの取得

date関数はformatオプションを使うと様々な表示ができます。
HELPを見てもわかりますが、下記に載せておきます。

dateコマンドの便利な使い方

今回はソース対象ではなかったので、記述してませんが、shellのdateコマンドは、非常に便利なモードがあります。
date コマンド | hydroculのメモ
上記のページにも書かれていますが、dateコマンドの-dオプションで以下の様な日付の取得が行えます。

最後の3/31の1ヶ月前が3/3になっている事に疑問を持つ人も多いかもしれませんが、これはこのコマンド特有の仕様で以下の事を理解すれば納得できます。
1. 3/31の1ヶ月前は2/31
2. 2月は28までしか無いので、2/29 => 3/1 , 2/30 => 3/2 , 2/31 => 3/3
上記のような結果になるので、こうした特性を理解してバッチを作ったりしないと、とんでもないバグが生まれてしまうかもしれませんね。
「○日後」としたほうが良いかも。

Leave a Reply

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*