コード日進月歩

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

Timeのmktimeをすると、タイムゾーンはシステムに依存する様子

おお…なるほど…?という実装。あんまり明記されていないので言い切れない感じのタイトル。

環境

マシンA

$ ruby -v
ruby 2.6.2p47 (2019-03-13 revision 67232) [x86_64-linux]
$ date
2019410日 水曜日 06:39:32 UTC

マシンB

$ ruby -v
ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18]
$ date
2019410日 水曜日 154024秒 JST

仕様

mktime(sec, min, hour, mday, mon, year, wday, yday, isdst, zone) -> Time 引数で指定した地方時の Time オブジェクトを返します。

引数の順序は Time#to_a と全く同じです。 引数 wday, yday, zone に指定した値は無視されます。 引数に nil を指定した場合の値はその引数がとり得る最小の値です。

[PARAM] sec: 秒を 0 から 60 までの整数か文字列で指定します。(60はうるう秒) [PARAM] min: 分を 0 から 59 までの整数か文字列で指定します。 [PARAM] hour: 時を 0 から 23 までの整数か文字列で指定します。 [PARAM] mday: 日を 1 から 31 までの整数か文字列で指定します。 [PARAM] mon: 1(1月)から 12(12月)の範囲の整数か文字列で指定します。 英語の月名("Jan", "Feb", ... などの省略名。文字の大小は無視)も指定できます。 [PARAM] year: 年を整数か文字列で指定します。例えば 1998 年に対して 1998 を指定します。 [PARAM] wday: 無視されます。 [PARAM] yday: 無視されます。 [PARAM] isdst: 指定した日時が夏時間(Daylight Saving Time)なら true を指定します。 そうでないなら、false を指定します。 [PARAM] zone: 無視されます。

zoneは指定されても「無視されます。」

確認

マシンA

mktime_time = Time.mktime(1,2,3,4,1,1500,1,1,1,"zone")
=> 1500-01-04 03:02:01 +0000
mktime_time.zone
=> "UTC"

マシンB

mktime_time = Time.mktime(1,2,3,4,1,1500,1,1,1,"zone")
=> 1500-01-04 03:02:01 +0900
mktime_time.zone
=> "JST"

無視というのはマシンに依存するという意だった様子。

関連リンク