ようへいの日々精進XP

よかろうもん

ギョームにてすぐに日本時間が欲しい時に僕がやること

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

以上

メモでした.