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

広告

Timeクラスのオブジェクトは現在時刻だけではなく指定した日時を表すTimeオブジェクトを作成できます。Timeクラスで用意されている「local」メソッドを使います。

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

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

引数が異なる2つのメソッドがあります。1番目のメソッドをの場合は少なくとも1つの引数を指定して下さい。省略された引数は取り得る最小の値に設定されます。

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

Time.local(2007)

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

また「local」メソッドの2番目の使い方を利用する場合は10個の引数を全て指定します。指定した引数の中でも「wday, yday, zone」の3つの値は設定しても意味が無く無視されます。この形式の引数の順序はTimeクラスの「to_a」メソッドを使ってTimeクラスの値を配列として取得する場合の並びと同じです。

「local」メソッドと同じことをするメソッドとして「mktime」メソッドが用意されています。

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

またローカルタイムでは無く、協定世界時の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」メソッドと同じです。

サンプルプログラム

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

LibraryTime3.rb

#! ruby -Ks

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

t = Time.local(2007)

print(t.year, "年", t.month, "月", t.day, "日¥n")
print(youbi[t.wday], "曜日¥n")
print(t.hour, "時", t.min, "分", t.sec, "秒¥n")
print("TimeZone:", t.zone, "¥n")
print("今年の元旦から数えて", t.yday, "日目¥n")

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

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

( Written by Tatsuo Ikura )