RubyでUTCの時刻情報をJST基準に変換する
RubyでUTC(協定世界時)のデータをJST(日本標準時)に変換したいとき。
in_time_zone('Tokyo')
というメソッドを使えば変換できます。
たとえば、APIで受け取ったデータの中に時刻データが入っていて、そのままだとUTCのデータだから日本基準としては9時間遅れているように、見えてしまいます。
APIで時刻のデータを受け取ると、文字列になってしまっているので、strptime
で時刻形式に変換、あとはin_time_zone('Tokyo')
をしてあげればOKです。
以下のように、2021-09-10T09:58:35Z
の時刻情報がJSTで2021年9月10日の18時58分になりました!
[1] pry(main)> Time.strptime('2021-09-10T09:58:35Z', '%Y-%m-%dT%H:%M:%S%Z').in_time_zone('Tokyo')
=> Fri, 10 Sep 2021 18:58:35.000000000 JST +09:00
ちなみに余談ですが、UTCから何時間ずれているのか、時差の情報はTime.current.utc_offset
で取得が可能です。
以下のように日本がlocaleだと、32400秒
= 32400 / 60 / 60
で9時間ですね。
[1] pry(main)> Time.current.utc_offset
=> 32400
これは、時刻型に足し算もできます。
ただし、これだとあくまでもUTCのままなので、このやり方で時差の調整はやらないほうがいいでしょう。
[1] pry(main)> Time.strptime('2021-09-10T09:58:35Z', '%Y-%m-%dT%H:%M:%S%Z') + Time.current.utc_offset
=> 2021-09-10 18:58:35 UTC
この記事の環境情報
- Ruby 3.1.2
Rubyに関する他の記事を読む
- slimでtype='application/ld+json'のscriptタグを書く
- Slack APIによる自動メッセージでユーザーグループにメンションする方法
- RubyでUnixtimeからTimeオブジェクトを生成する
- gemインストール時にUndefined symbols for architecture arm64と出たときの対応
最近の記事を読む
- Flutterでcontextを使わずにlocale情報を取得する
- Cloud RunでIAPを有効にしようとしてハマったこと
- slimでtype='application/ld+json'のscriptタグを書く
- タグマネージャーでjsのloadイベントを発火させたいとき
- mysqlコマンドを実行してERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)と言われたら