コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

RubyでYAMLのstamp型を読み込むと、それっぽい文字列があってもそのままだとタイムゾーン情報文字列が出てくれない

動作原理までは突き止められていないのでただのメモ

環境

$ ruby -v
ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin18]

例えばこんなyamltext.yaml として用意する

stamp1: 2005-01-01 00:00:00 +09:00
stamp2: 2005-01-01 00:00:00 +10:00
require 'yaml'
object = YAML.load_file('test.yml')

こんな感じでloadする、そうすると

object["stamp1"].class
#=> Time

Timeで入ってる。そのためzoneにもよしなに変わっているのかと思いきや…

object["stamp1"].zone
#=> nil

そんなことはなかった。

時間的には正しい値がちゃんと入っている

object["stamp1"]
# => 2005-01-01 00:00:00 +0900

# to_iして戻したらちゃん戻る
Time.at(object["stamp1"].to_i)
# => 2005-01-01 00:00:00 +0900

Time.at(object["stamp1"].to_i).zone
# => "JST"

余談

もう一回Time.parseすると出てくる

Time.parse(object["stamp1"].to_s).zone
#=> "JST"

参考リンク