サイト内検索:

calclock

名前

calclock : 暦、時間の計算(カレンダークロック)

書式

使い方とオプション

Usage

calclock <f1> <f2> <f3>... filename

Option

-r
--dst

説明

引数や標準入力から読み込んだファイルの指定したフィールドの年月日や時間を全て 1970年1月1日0時0分0秒からの秒数(UNIX Time)に置き換えたり、戻したりするツールです。年月日や時刻同士の計算をする場合に、一旦10進数に置き換えて計算するのに使用します。

日時のフォーマットは YYYYMMDD(年月日)の8桁、 YYYYMMDDhhmm(年月日時分)の 12桁、YYYYMMDDhhmmss(年月日時分秒)の 14桁の3種類のいずれかです。

変換後の値を分に直す場合は 60、時は 3600、日は 86400 で除算します。

-r オプションを指定すると、逆変換(UNIX Time から YYYYMMDDhhmm へ変換)を行います。

例(その1)

(元データ)

$ cat data
0001 0000007 20160201 20160206 117 8335 -145
0001 0000007 20160203 20160206 221 15470 0
0001 0000007 20160205 20160206 85 5950 0
0001 0000007 20160206 20160206 293 20527 -17
0001 0000007 20160207 20160206 445 31150 0
0002 0000007 20160208 20160206 150 11768 -1268
0002 0000007 20160209 20160206 588 41160 0
0002 0000007 20160210 20160206 444 31080 0

4フィールド目と3フィールド目を変換し、その間の差分の日数を求めます。

$ calclock 3 4 < data     |
tee data2                 |
lcalc '($6 - $4) / 86400' > data3
$ cat data2
0001 0000007 20160201 1454252400 20160206 1454684400 117 8335 -145
0001 0000007 20160203 1454425200 20160206 1454684400 221 15470 0
0001 0000007 20160205 1454598000 20160206 1454684400 85 5950 0
0001 0000007 20160206 1454684400 20160206 1454684400 293 20527 -17
0001 0000007 20160207 1454770800 20160206 1454684400 445 31150 0
0002 0000007 20160208 1454857200 20160206 1454684400 150 11768 -1268
0002 0000007 20160209 1454943600 20160206 1454684400 588 41160 0
0002 0000007 20160210 1455030000 20160206 1454684400 444 31080 0
$ cat data3
5
3
1
0
-1
-2
-3
-4

例(その2)

-r オプション(逆変換)

指定したフィールドの値(1970年1月1日0時0分0秒からの秒数=UNIX Time)を通常の年月日時分秒の14桁の表記に変換します。他のフォーマットにする場合は、出力後に self や dayslash などを利用します。

(元データ)

$ cat data
0001 0000007 201602010900 117 8335 -145
0001 0000007 201602031030 221 15470 0
0001 0000007 201602051200 85 5950 0
0001 0000007 201602061300 293 20527 -17
0001 0000007 201602071430 445 31150 0
0002 0000007 201602081500 150 11768 -1268
0002 0000007 201602091830 588 41160 0
0002 0000007 201602102000 444 31080 0

第3フィールドの各日時の12時間後の日時を求めます。

$ calclock 3 data      |
lcalc '$4 + 12 * 3600' |
tee data2              |
calclock -r 1          |
tee data3              |
self 2.1.12            |
tee data4              |
dayslash --output yyyy/mm/dd-HH:MM 1 > data5

(calclock -r 実行前)

$ cat data2
1454328000
1454506200
1454684400
1454774400
1454866200
1454954400
1455053400
1455145200

(calclock -r 実行後)

$ cat data3
1454328000 20160201210000
1454506200 20160203223000
1454684400 20160206000000
1454774400 20160207010000
1454866200 20160208023000
1454954400 20160209030000
1455053400 20160210063000
1455145200 20160211080000

(12時間後の日時)

$ cat data4
201602012100
201602032230
201602060000
201602070100
201602080230
201602090300
201602100630
201602110800

(整形後の日時)

$ cat data5
2016/02/01-21:00
2016/02/03-22:30
2016/02/06-00:00
2016/02/07-01:00
2016/02/08-02:30
2016/02/09-03:00
2016/02/10-06:30
2016/02/11-08:00

注意

注意1

YYYY に許される範囲は 1900 〜 9999 です。範囲を逸脱した場合やフィールドのフォーマットが正しくない場合は、結果が “xxxxxxxxxx”(正変換)、“xxxxxxxxxxxxxx”(逆変換)になります。

注意2

UNIX Time が UTC なので、正変換、逆変換ともにタイムゾーンや TZ 環境変数の影響を受けます。例えば、タイムゾーンが日本の場合は、次の様になります。

$ echo 19700101 | calclock 1
19700101 -32400
$ export TZ=0; echo 19700101 | calclock 1
19700101 0

注意3

例1の様に日付のみの計算で時刻を伴わない場合は、mdate の方が効率的です。

Version and Edition

Thu Jan 14 21:51:32 JST 2021

Edition : 2


© 2021 Universal Shell Programming Laboratory site

戻る