tl;dr
AWS がメールで送ってくる EC2 等のメンテナンス通知. メンテナンスの日時が UTC で表記されているので, その時間を日本時間 (JST) で欲しい時に僕がやっていることをメモっておきます.
何やるか
まずは irb を起動します.
$ ruby -v ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin17] $ irb -v irb 0.9.6(09/06/30) $ irb
そして, おもむろに time ライブラリを require します.
irb(main):001:0> require 'time' => true
そして, Time クラス parse メソッドの引数に UTC 時間を付与し, さらに getlocal メソッドで日本時間を得ます.
irb(main):002:0> Time.parse('2018-11-08T20:00:00.000Z').getlocal => 2018-11-09 05:00:00 +0900
getlocal は以下のドキュメントを参考にさせて頂きました.
docs.ruby-lang.org
上記の例だと, UTC 時間で 2018 年 11 月 8 日の 20 時は日本時間で 2018 年 11 月 9 日の 5 時ということになります.
また, Object クラスをオープンクラスして, 以下のようなメソッドを差し込むと…
class Object def to_local_time require 'time' Time.parse(self).getlocal end end
以下のように書くことが出来る.
irb(main):001:0> class Object irb(main):002:1> def to_local_time irb(main):003:2> require 'time' irb(main):004:2> Time.parse(self).getlocal irb(main):005:2> end irb(main):006:1> end => :to_local_time irb(main):007:0> '2018-11-08T20:00:00.000Z'.to_local_time => 2018-11-09 05:00:00 +0900
Ruby のこういうところ (オレオレメソッドを Ruby 本体に追加出来る) が好きだな〜.
同じようなことを python でも
検算という意味で python でも同じようなことをやってみます.
$ python -V Python 3.6.5 $ python >>> from pytz import timezone >>> from dateutil import parser >>> u = '2018-11-08T20:00:00.000Z' >>> j = parser.parse(u).astimezone(timezone('Asia/Tokyo')) >>> print(j) 2018-11-09 05:00:00+09:00
前述の Ruby で試した場合と同じ結果を得ることが出来ました.
尚, 本検算については, 以下の記事を参考にさせて頂きました. ありがとうございます.
qiita.com
以上
メモでした.