Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2912

Bash でタイムスタンプを扱う

$
0
0

Bash でタイムスタンプや、その比較を行いたかったが、やり方を知らないことに気づいたので、焦らずしっかり調べて理解する。

現在の時間の取得

dateコマンドは現在時間を取得する。

$ date
Fri Apr 17 14:54:18 PDT 2020

上記のは現在のタイムゾーンの値であるので、大小比較が可能な、1970-01-01 00:00:00 UTCからの経過秒数に変換します。%sがそれを表す記号ですので、`date "+フォーマット" の形式で形式をしていして表示できます。

$ date"+%s"
1587160470

Date のフォーマット

$ date"+%m/%d/%Y %H:%M"
04/17/2020 15:01

現在時のフォーマットはこれでよいですが、特定の文字列のフォーマットから違うフォーマットに変換する場合は、--dateもしくは -dの引数で文字列を渡すとよいです。

$ date-d"04/17/2020 15:10"    
Fri Apr 17 15:10:00 PDT 2020
$ date-d"04/17/2020 15:10""+%m/%d/%Y %H:%M"
04/17/2020 15:10

%s からのフォーマット

ただし、文字列ではなく、1970-01-01 00:00:00 UTCからの経過秒数 から変換をかけたい時は@を添付します。

date--date @1269553200 "+%m/%d/%Y %H:%M"
03/25/2010 14:40

大小の比較

タイムスタンプの大小比較は、1970-01-01 00:00:00 UTCからの経過秒数で比較するのがよさそうです。単純に比較するとよいです。結果も予想通り。ちなみに、Bashで数値の計算をしたいときは、$((計算))になります。

test.sh

#!/bin/bashlast=$(date"+%s")sleep 1

current=$(date"+%s")if[$current-gt$last];then 
        s=$((current - last))echo"current is bigger than Last: difference: ${s} sec."else
   s=$((last - current))echo"Last is bigger than Current: difference: ${s} sec."fi

結果は想定の通りです。

$./test.sh 
current is bigger than Last: difference: 1 sec.

Viewing all articles
Browse latest Browse all 2912

Trending Articles