指定の日時のTimeオブジェクトを作成する

Time クラスのオブジェクトは現在時刻だけではなく指定した日時を表す Time オブジェクトを作成できます。ここでは Ruby で指定した日時の Time オブジェクトを作成する方法について解説します。

(Last modified: )

指定の日時のTimeオブジェクトを作成する

指定の日時の Time クラスのオブジェクトを作成する方法です。 Time クラスで用意されている local メソッドを使います。

Time.local(year, mon = 1, day = 1, 
  hour = 0, min = 0, sec = 0, usec = 0)

local メソッドを使った場合はローカルタイムの Time クラスのオブジェクトを作成します。

例えば年だけを 2022 年に指定した場合は、他の値は次の通りに設定されます。

Time.local(2022)

月  : 1
日  : 1
曜日: 1 (曜日は月と日の値から計算される)
時  : 0
分  : 0
秒  : 0

値を指定する場合は次のルールに従って指定してください。

year: 年を整数か文字列で指定します。2022年なら 2022。
mon: 1(1月)から 12(12月)の範囲の整数または文字列で指定します。
day: 日を 1 から 31 までの整数か文字列で指定します。
hour: 時を 0 から 23 までの整数か文字列で指定します。
min: 分を 0 から 59 までの整数か文字列で指定します。
sec: 秒を 0 から 60 までの整数か文字列で指定します。(60はうるう秒)
usec: マイクロ秒を整数か文字列で指定します。

同じ Time クラスで用意されている local メソッドですが、引数が異なるものが用意されています。

local(sec, min, hour, mday, mon, year, 
  wday, yday, isdst, zone)

こちらのメソッドを使用する場合は 10 個の引数をすべて指定する必要があります。ただし wday, yday, zone の 3 つの引数は指定しても無視されます。この形式の引数の順序は Time クラスの to_a メソッドを使って Time オブジェクトの値を配列として取得する場合の並びと同じです。

localメソッドと同じことをするメソッドとして Time クラスには mktime メソッドが用意されています。

Time.mktime(year[, mon[, day[, 
  hour[, min[, sec[, usec]]]]]])
Time.mktime(sec, min, hour, mday, mon, year, 
  wday, yday, isdst, zone)

またローカルタイムでは無く、協定世界時の Time クラスのオブジェクトを取得するには Time クラスで gm メソッド又は utc メソッドを使用してください。

Time.gm(year[, mon[, day[, 
  hour[, min[, sec[, usec]]]]]])
Time.gm(sec, min, hour, mday, mon, year, 
  wday, yday, isdst, zone)

Time.utc(year[, mon[, day[, 
  hour[, min[, sec[, usec]]]]]])
Time.utc(sec, min, hour, mday, mon, year, 
  wday, yday, isdst, zone)

引数の指定の仕方については local メソッドと同じです。

サンプルコード

では簡単なサンプルで試してみます。

# encoding: UTF-8

youbi = %w[日 月 火 水 木 金 土]

t = Time.local(2022)
puts(t)

print(t.year, "年", t.month, "月", t.day, "日")
print("(", youbi[t.wday], ") ")
print(t.hour, "時", t.min, "分", t.sec, "秒\n")
print("TimeZone:", t.zone, "\n")

puts()

t = Time.gm(2022)
puts(t)

print(t.year, "年", t.month, "月", t.day, "日")
print("(", youbi[t.wday], ") ")
print(t.hour, "時", t.min, "分", t.sec, "秒\n")
print("TimeZone:", t.zone, "\n")

puts()

t = Time.local(2022,10,26,13,45,29)
puts(t)

print(t.year, "年", t.month, "月", t.day, "日")
print("(", youbi[t.wday], ") ")
print(t.hour, "時", t.min, "分", t.sec, "秒\n")
print("TimeZone:", t.zone, "\n")

実行結果は次のようになります。

任意の時刻のTimeオブジェクトを作成

-- --

Ruby で指定した日時の Time オブジェクトを作成する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。