これは、なにをしたくて書いたもの?
date
コマンドで、あるタイムゾーンの時刻を別のタイムゾーンの時刻に変換して表示するにはどうしたらいいのかな?と思ってメモ。
環境
今回の環境は、こちら。
$ uname -srvmpio Linux 5.4.0-122-generic #138-Ubuntu SMP Wed Jun 22 15:00:31 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.4 LTS Release: 20.04 Codename: focal
$ timedatectl Local time: 木 2022-08-04 22:59:57 JST Universal time: 木 2022-08-04 13:59:57 UTC RTC time: 木 2022-08-04 13:59:57 Time zone: Asia/Tokyo (JST, +0900) System clock synchronized: yes NTP service: active RTC in local TZ: no
現在時刻をUTC(別のタイムゾーン)で表示する
現在時刻。
$ date 2022年 8月 4日 木曜日 23:07:37 JST
UTCで表示するには、--utc
または-u
オプションを使用すればOKです。
$ date --utc 2022年 8月 4日 木曜日 14:07:50 UTC $ date -u 2022年 8月 4日 木曜日 14:07:54 UTC
TZ
環境変数を使う方法もあります。
$ TZ=UTC date 2022年 8月 4日 木曜日 14:08:45 UTC
TZ
環境変数を使った方法は、manページにも書かれています。
Show the time on the west coast of the US (use tzselect(1) to find TZ) $ TZ='America/Los_Angeles' date
というわけで、現在時刻を別のタイムゾーンで表示するには、TZ
環境変数を使えば良さそうです。UTCに限っては、--utc
(-u
)オプションが
使えるということですね。
指定したタイムゾーンの時刻を、別のタイムゾーンに変換して表示する
date
コマンドは、--date
または-d
で指定した時刻を表示することができます。この時に指定した時刻のタイムゾーンと、コマンドの結果として
表示するタイムゾーンを変更してみたいと思います。
表示時には、フォーマットも指定してみましょう。
$ date --date '2022-08-04 23:15:40 JST' --utc '+%Y-%m-%d %H:%M:%S %Z' 2022-08-04 14:15:40 UTC
先ほどと同様、--utc
オプションを使えばOKです。
TZ
環境変数を使う例。
$ TZ=UTC date --date '2022-08-04 23:15:40 JST' '+%Y-%m-%d %H:%M:%S %Z' 2022-08-04 14:15:40 UTC
manページを見ていて気づいたのですが、--date
オプションで時刻を与える場合は、この中にTZ
環境変数を含めてもよいみたいですね。
$ date --date 'TZ="Asia/Tokyo" 2022-08-04 23:15:40' --utc '+%Y-%m-%d %H:%M:%S %Z' 2022-08-04 14:15:40 UTC
この場合、JST
指定は不要になります。
Show the local time for 9AM next Friday on the west coast of the US $ date --date='TZ="America/Los_Angeles" 09:00 next Fri'
$ TZ=Asia/Tokyo date --date '2022-08-04 14:15:40 UTC' '+%Y-%m-%d %H:%M:%S %Z' 2022-08-04 23:15:40 JST $ TZ=Asia/Tokyo date --date 'TZ="UTC" 2022-08-04 14:15:40' '+%Y-%m-%d %H:%M:%S %Z' 2022-08-04 23:15:40 JST
こちらは、TZ
環境変数を使うパターンのみです。
ちょっとした小ネタとして、覚えておくと便利なのかな、と思います。