時差を調べるUNIXコマンド (シェルスクリプト) を作ってみた
はじめに
海外の「現地時間は今何時」を知りたいことはよくある話である。単純に現在の時刻を調べるのであれば、世界時計を眺めれば済む話で、Webサービスも多数ある。ところが「現地時間の午前9時は日本時間の何時」とか知りたい場合は意外に調べやすくない。スマホにある世界時計の機能も、現在時刻を知るのは簡単だが、今の時間とは違う時間については容易ではない。
自分は普段シェルのコマンドラインを利用していることが多いので、時差をコマンドラインで表示するツールが欲しくなったということもあって作ってみた tzdiff コマンドを紹介する。
この記事の公開の段階では、コマンド名は timediff だったが、別のコマンドとコマンド名が被ることが判明したため、tzdiff という名前に変更した。(2018-09-04 更新)
tzdiff の使い方
tzdiff を引数無しで実行すると、/usr/share/zoneinfo の 一覧が得られる
$ tzdiff
Africa/ Australia/ Etc/ MST WET
America/ CET Europe/ MST7MDT posixrules
Antarctica/ CST6CDT Factory PST8PDT zone.tab
Arctic/ EET HST Pacific/
Asia/ EST Indian/ SystemV/
Atlantic/ EST5EDT MET UTC
この中から Australia を指定する。
$ tzdiff Australia
Australia/Adelaide Australia/Darwin Australia/Lord_Howe
Australia/Brisbane Australia/Eucla Australia/Melbourne
Australia/Broken_Hill Australia/Hobart Australia/Perth
Australia/Currie Australia/Lindeman Australia/Sydney
さらに Australia/Sydney を指定すると、時差が10時間分表示される。
$ tzdiff Australia/Sydney
Australia/Sydney
2018-08-17 16:18 AEST 2018-08-17 15:18 JST
2018-08-17 17:18 AEST 2018-08-17 16:18 JST
2018-08-17 18:18 AEST 2018-08-17 17:18 JST
2018-08-17 19:18 AEST 2018-08-17 18:18 JST
2018-08-17 20:18 AEST 2018-08-17 19:18 JST
2018-08-17 21:18 AEST 2018-08-17 20:18 JST
2018-08-17 22:18 AEST 2018-08-17 21:18 JST
2018-08-17 23:18 AEST 2018-08-17 22:18 JST
2018-08-18 00:18 AEST 2018-08-17 23:18 JST
2018-08-18 01:18 AEST 2018-08-18 00:18 JST
このように引数に知りたい地域の Time Zone を指定するだけである。デフォルトでは今の時間から10時間分表示するが、24時間分表示したいのであれば、最後に数字の引数を指定する。
$ tzdiff America/New_York 24
America/New_York
2018-08-16 22:02 EDT 2018-08-17 11:02 JST
2018-08-16 23:02 EDT 2018-08-17 12:02 JST
2018-08-17 00:02 EDT 2018-08-17 13:02 JST
2018-08-17 01:02 EDT 2018-08-17 14:02 JST
2018-08-17 02:02 EDT 2018-08-17 15:02 JST
2018-08-17 03:02 EDT 2018-08-17 16:02 JST
2018-08-17 04:02 EDT 2018-08-17 17:02 JST
2018-08-17 05:02 EDT 2018-08-17 18:02 JST
2018-08-17 06:02 EDT 2018-08-17 19:02 JST
2018-08-17 07:02 EDT 2018-08-17 20:02 JST
2018-08-17 08:02 EDT 2018-08-17 21:02 JST
2018-08-17 09:02 EDT 2018-08-17 22:02 JST
2018-08-17 10:02 EDT 2018-08-17 23:02 JST
2018-08-17 11:02 EDT 2018-08-18 00:02 JST
2018-08-17 12:02 EDT 2018-08-18 01:02 JST
2018-08-17 13:02 EDT 2018-08-18 02:02 JST
2018-08-17 14:02 EDT 2018-08-18 03:02 JST
2018-08-17 15:02 EDT 2018-08-18 04:02 JST
2018-08-17 16:02 EDT 2018-08-18 05:02 JST
2018-08-17 17:02 EDT 2018-08-18 06:02 JST
2018-08-17 18:02 EDT 2018-08-18 07:02 JST
2018-08-17 19:02 EDT 2018-08-18 08:02 JST
2018-08-17 20:02 EDT 2018-08-18 09:02 JST
2018-08-17 21:02 EDT 2018-08-18 10:02 JST
毎時 0 時を指定したければ引数に 0 を追加する
$ tzdiff America/New_York 0
America/New_York
2018-08-16 22:00 EDT 2018-08-17 11:00 JST
2018-08-16 23:00 EDT 2018-08-17 12:00 JST
2018-08-17 00:00 EDT 2018-08-17 13:00 JST
2018-08-17 01:00 EDT 2018-08-17 14:00 JST
2018-08-17 02:00 EDT 2018-08-17 15:00 JST
2018-08-17 03:00 EDT 2018-08-17 16:00 JST
2018-08-17 04:00 EDT 2018-08-17 17:00 JST
2018-08-17 05:00 EDT 2018-08-17 18:00 JST
2018-08-17 06:00 EDT 2018-08-17 19:00 JST
2018-08-17 07:00 EDT 2018-08-17 20:00 JST
これなら一目瞭然で現地時間の 7:00 は日本時間の何時?というのがすぐにわかる。
また tzdiff America/New_York 24 0
のように毎時 0分で 24時間分という指定もできる。
都市の指定は、UNIX系OSで /usr/share/zoneinfo にある Time Zone Database をそのまま利用している。そのため "UTC", "Etc/GMT+9" なども指定できる。
さらに tzdiff ではちょっとしたコンプリーションもどきを実装して、使い勝手をよくしてある。
$ tzdiff Lon ( ここで最後は Tab ではなく Return つまり引数に "Lon" を指定する。)
Arctic/Longyearbyen Europe/London
都市名が 「Lon」で始まる都市の一覧が表示されるので、「Lond」まで指定すれば都市が確定する。
$ tzdiff Lond
Europe/London
2018-08-17 03:06 BST 2018-08-17 11:06 JST
2018-08-17 04:06 BST 2018-08-17 12:06 JST
2018-08-17 05:06 BST 2018-08-17 13:06 JST
2018-08-17 06:06 BST 2018-08-17 14:06 JST
2018-08-17 07:06 BST 2018-08-17 15:06 JST
2018-08-17 08:06 BST 2018-08-17 16:06 JST
2018-08-17 09:06 BST 2018-08-17 17:06 JST
2018-08-17 10:06 BST 2018-08-17 18:06 JST
2018-08-17 11:06 BST 2018-08-17 19:06 JST
2018-08-17 12:06 BST 2018-08-17 20:06 JST
今時のシェルはコマンドライン編集機能が充実しているので、このように操作するのは簡単なはずである。
また、指定した時刻からも調べられる。次の例は、アメリカ東海岸で2019年の夏時間から標準時間に切り替わる時間帯を表示している。
$ tzdiff -t 2018-11-04T10:00 New_
America/New_York
2018-11-03 21:00 EDT 2018-11-04 10:00 JST
2018-11-03 22:00 EDT 2018-11-04 11:00 JST
2018-11-03 23:00 EDT 2018-11-04 12:00 JST
2018-11-04 00:00 EDT 2018-11-04 13:00 JST
2018-11-04 01:00 EDT 2018-11-04 14:00 JST
2018-11-04 01:00 EST 2018-11-04 15:00 JST
2018-11-04 02:00 EST 2018-11-04 16:00 JST
2018-11-04 03:00 EST 2018-11-04 17:00 JST
2018-11-04 04:00 EST 2018-11-04 18:00 JST
2018-11-04 05:00 EST 2018-11-04 19:00 JST
同時に複数の都市も指定できる。ワールドワイドなテレカンの時間調整にはもってこいである。
$ tzdiff Los New_ Brus 0
America/Los_Angeles America/New_York Europe/Brussels
2018-08-16 19:00 PDT 2018-08-16 22:00 EDT 2018-08-17 04:00 CEST 2018-08-17 11:00 JST
2018-08-16 20:00 PDT 2018-08-16 23:00 EDT 2018-08-17 05:00 CEST 2018-08-17 12:00 JST
2018-08-16 21:00 PDT 2018-08-17 00:00 EDT 2018-08-17 06:00 CEST 2018-08-17 13:00 JST
2018-08-16 22:00 PDT 2018-08-17 01:00 EDT 2018-08-17 07:00 CEST 2018-08-17 14:00 JST
2018-08-16 23:00 PDT 2018-08-17 02:00 EDT 2018-08-17 08:00 CEST 2018-08-17 15:00 JST
2018-08-17 00:00 PDT 2018-08-17 03:00 EDT 2018-08-17 09:00 CEST 2018-08-17 16:00 JST
2018-08-17 01:00 PDT 2018-08-17 04:00 EDT 2018-08-17 10:00 CEST 2018-08-17 17:00 JST
2018-08-17 02:00 PDT 2018-08-17 05:00 EDT 2018-08-17 11:00 CEST 2018-08-17 18:00 JST
2018-08-17 03:00 PDT 2018-08-17 06:00 EDT 2018-08-17 12:00 CEST 2018-08-17 19:00 JST
2018-08-17 04:00 PDT 2018-08-17 07:00 EDT 2018-08-17 13:00 CEST 2018-08-17 20:00 JST
一応簡単な ヘルプもある。
$ tzdiff -h
Usage: tzdiff [-0] [-n count] [-f format] [-t time] timezone [timezone ...] [count] [0]
-0 : round down to hour
-n : max hours (default: 10)
-f : output format (using '+output_fmt' of 'date' command)
-t : start time (YYYY-mm-ddThh:mm or YYYYmmddThhmm)
more info: <https://github.com/belgianbeer/tzdiff>
動作環境
tzdiff そのものはシェルスクリプトであり、FreeBSD / NetBSD / OpenBSD / OS X / Debian / Ubuntu / CentOS での動作を確認している。UNIX系のOSであれば大部分のもので問題無く動作すると思われるが、date コマンドのオプションの違いで動かないものがあるかもしれない。その場合は GNU の date コマンドを用意すれば動くはずである。Windows の場合は、Windows Subsystem for Linux で利用できる。
おわりに
tzdiff の最初の版である timediff を作ったのは 2016年7月頃なので、すでに2年ほど経過し、機能追加や細かい修正を行っている。自分でも驚いたのだが Qiita に投降しようと下書きを書いたのが 2017年7月頃だったようである。すでに内容が古くなっていたため、現在の仕様に合わせて記事を修正した。
Author And Source
この問題について(時差を調べるUNIXコマンド (シェルスクリプト) を作ってみた), 我々は、より多くの情報をここで見つけました https://qiita.com/belgianbeer/items/962dfd394dbe287856c0著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .