動作原理までは突き止められていないのでただのメモ
環境
$ ruby -v ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin18]
例
例えばこんなyamlを text.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"
参考リンク
- module Psych (Ruby 2.6.0)
- YAML.rb is YAML for Ruby | Cookbook - mktimeでやっている感じの記述があるので、もしかしたらそのせいかもしれない
- class Time (Ruby 2.6.0) - mktimeでzone値を設定しても無視される