要約
時刻を表すクラスです。
Time.now は現在の時刻を返します。 File.mtime などが返すファイルのタイムスタンプは Time オブジェクトです。
Time オブジェクトは時刻を起算時からの経過秒数で保持しています。起算時は協定世界時(UTC、もしくはその旧称から GMT とも表記されます) の 1970年1月1日午前0時です。なお、うるう秒を勘定するかどうかはシステムによります。
現在の Unix システムでの最大時刻は、協定世界時の2038年1月19日午前3時14分7秒です。
Time オブジェクトが格納可能な時刻の範囲は環境によって異なります。範囲の下限としては、上記起算時からの経過秒数として 0 および正数しか受け付けない環境もあれば、負数も受け付ける環境もあります。また、範囲の上限としては、上記の Unix システムでの最大時刻を越えて 64bit 値の範囲の経過秒数を受け付ける環境もあります。さらに、他に特定の時点を越える時刻の値を受け付けない環境もあります。 Time オブジェクトを生成する各メソッドで、それぞれの環境での範囲外の時刻を格納しようとした場合は例外が発生します。
また、Time オブジェクトは協定世界時と地方時のどちらのタイムゾーンを使用するかのフラグを内部に保持しています。タイムゾーンのフラグは Marshal データに保持されます。
p Marshal.load(Marshal.dump(Time.now.gmtime)).zone # => "UTC"
time ライブラリによって、Time.parse, Time.rfc2822, Time.httpdate, Time.iso8601 等が拡張されます。
localtime(3) も参照してください。
C 言語との違いに注意
C 言語の tm 構造体とは異なり、month は 1 月に対して 1 を返し、year は 1998 年に対して 1998 を返します。また、 yday は 1 から数えます。
目次
- 特異メソッド
- インスタンスメソッド
-
- +
- -
- <=>
- asctime
- ctime
- day
- dst?
- eql?
- friday?
- getgm
- getlocal
- getutc
- gmt?
- gmt_offset
- gmtime
- gmtoff
- hash
- hour
- isdst
- localtime
- mday
- min
- mon
- monday?
- month
- nsec
- round
- saturday?
- sec
- strftime
- subsec
- succ
- sunday?
- thursday?
- to_a
- to_f
- to_i
- to_r
- to_s
- tuesday?
- tv_nsec
- tv_sec
- tv_usec
- usec
- utc
- utc?
- utc_offset
- wday
- wednesday?
- yday
- year
- zone
- 追加されるメソッド
継承しているメソッド
特異メソッド
at(time) -> Time[permalink][rdoc]-
time で指定した時刻の Time オブジェクトを返します。
引数が数値の場合、生成された Time オブジェクトのタイムゾーンは地方時となります。
- [PARAM] time:
- Time オブジェクト、もしくは起算時からの経過秒数を表わす数値で指定します。
Time.at(0) # => 1970-01-01 09:00:00 +0900 Time.at(Time.at(0)) # => 1970-01-01 09:00:00 +0900 Time.at(Time.at(0).getutc) # => 1970-01-01 00:00:00 UTC Time.at(946702800) # => 2000-01-01 14:00:00 +0900 Time.at(-284061600) # => 1960-12-31 15:00:00 +0900 Time.at(946684800.2).usec # => 200000 at(time, usec) -> Time[permalink][rdoc]-
time + (usec/1000000) の時刻を表す Time オブジェクトを返します。浮動小数点の精度では不十分な場合に使用します。
生成された Time オブジェクトのタイムゾーンは地方時となります。
- [PARAM] time:
- 起算時からの経過秒数を表わす値をInteger、 Float、 Rational、または他のNumericで指定します。
- [PARAM] usec:
- マイクロ秒をInteger、 Float、 Rational、または他のNumericで指定します。
例:
Time.at(946684800, 123456.789).nsec # => 123456789
gm(year, mon = 1, day = 1, hour = 0, min = 0, sec = 0, usec = 0) -> Time[permalink][rdoc]utc(year, mon = 1, day = 1, hour = 0, min = 0, sec = 0, usec = 0) -> Time-
引数で指定した協定世界時の Time オブジェクトを返します。
第2引数以降に nil を指定した場合の値はその引数がとり得る最小の値です。
- [PARAM] year:
- 年を整数か文字列で指定します。例えば 1998 年に対して 1998 を指定します。
- [PARAM] mon:
- 1(1月)から 12(12月)の範囲の整数または文字列で指定します。英語の月名("Jan", "Feb", ... などの省略名。文字の大小は無視)も指定できます。
- [PARAM] day:
- 日を 1 から 31 までの整数か文字列で指定します。
- [PARAM] hour:
- 時を 0 から 23 までの整数か文字列で指定します。
- [PARAM] min:
- 分を 0 から 59 までの整数か文字列で指定します。
- [PARAM] sec:
- 秒を 0 から 60 までの整数か文字列で指定します。(60はうるう秒)
- [PARAM] usec:
- マイクロ秒を整数か文字列で指定します。
- [EXCEPTION] ArgumentError:
- 与えられた引数の範囲が valid でない場合に発生します。
p Time.gm(2000, 1, 1) #=> 2000-01-01 00:00:00 UTC
gm(sec, min, hour, mday, mon, year, wday, yday, isdst, zone) -> Time[permalink][rdoc]utc(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:
- 無視されます。
- [EXCEPTION] ArgumentError:
- 与えられた引数の範囲が valid でない場合に発生します。
local(year, mon = 1, day = 1, hour = 0, min = 0, sec = 0, usec = 0) -> Time[permalink][rdoc]mktime(year, mon = 1, day = 1, hour = 0, min = 0, sec = 0, usec = 0) -> Time-
引数で指定した地方時の Time オブジェクトを返します。
第2引数以降に nil を指定した場合の値はその引数がとり得る最小の値です。
- [PARAM] year:
- 年を整数か文字列で指定します。例えば 1998 年に対して 1998 を指定します。
- [PARAM] mon:
- 1(1月)から 12(12月)の範囲の整数または文字列で指定します。英語の月名("Jan", "Feb", ... などの省略名。文字の大小は無視)も指定できます。
- [PARAM] day:
- 日を 1 から 31 までの整数か文字列で指定します。
- [PARAM] hour:
- 時を 0 から 23 までの整数か文字列で指定します。
- [PARAM] min:
- 分を 0 から 59 までの整数か文字列で指定します。
- [PARAM] sec:
- 秒を 0 から 60 までの整数か文字列で指定します。(60はうるう秒)
- [PARAM] usec:
- マイクロ秒を整数か文字列で指定します。
- [EXCEPTION] ArgumentError:
- 与えられた引数の範囲が valid でない場合に発生します。
p Time.local(2000, 1, 1) #=> 2000-01-01 00:00:00 +0900
local(sec, min, hour, mday, mon, year, wday, yday, isdst, zone) -> Time[permalink][rdoc]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:
- 無視されます。
- [EXCEPTION] ArgumentError:
- 与えられた引数の範囲が valid でない場合に発生します。
new -> Time[permalink][rdoc]now -> Time-
現在時刻の Time オブジェクトを生成して返します。タイムゾーンは地方時となります。
例:
Time.now # => 2009-06-24 12:39:54 +0900
new(year, mon = nil, day = nil, hour = nil, min = nil, sec = nil, utc_offset = nil) -> Time[permalink][rdoc]-
引数で指定した地方時の Time オブジェクトを返します。
mon day hour min sec に nil を指定した場合の値は、その引数がとり得る最小の値です。 utc_offset に nil を指定した場合の値は、現在のタイムゾーンに従います。
- [PARAM] year:
- 年を整数か文字列で指定します。例えば 1998 年に対して 1998 を指定します。
- [PARAM] mon:
- 1(1月)から 12(12月)の範囲の整数または文字列で指定します。英語の月名("Jan", "Feb", ... などの省略名。大文字小文字の違いは無視します)も指定できます。
- [PARAM] day:
- 日を 1 から 31 までの整数か文字列で指定します。
- [PARAM] hour:
- 時を 0 から 23 までの整数か文字列で指定します。
- [PARAM] min:
- 分を 0 から 59 までの整数か文字列で指定します。
- [PARAM] sec:
- 秒を 0 から 60 までの整数か文字列で指定します。(60はうるう秒)
- [PARAM] utc_offset:
- 協定世界時との時差を、秒を単位とする整数か、 "+HH:MM" "-HH:MM" 形式の文字列で指定します。
- [EXCEPTION] ArgumentError:
- 与えられた引数が無効である場合に発生します。
p Time.new(2008, 6, 21, 13, 30, 0, "+09:00") #=> 2008-06-21 13:30:00 +0900
インスタンスメソッド
self + other -> Time[permalink][rdoc]-
self より other 秒だけ後の時刻を返します。
- [PARAM] other:
- 自身からの秒数を数値で指定します。
t = Time.now #=> 2019-12-18 22:16:49 +0900 t + (60 * 60 * 24) #=> 2019-12-19 13:16:49 +0900
self - time -> Float[permalink][rdoc]-
自身と time との時刻の差を Float で返します。単位は秒です。
- [PARAM] time:
- 自身との差を算出したい Time オブジェクトを指定します。
t = Time.now #=> 2019-12-18 22:16:49 +0900 t2 = t + 2592000 #=> 2020-01-17 22:16:49 +0900 t2 - t #=> 2592000.0
self - sec -> Time[permalink][rdoc]-
自身より sec 秒だけ前の時刻を返します。
- [PARAM] sec:
- 実数を秒を単位として指定します。
t = Time.now #=> 2019-12-18 22:16:49 +0900 t2 = t + 2592000 #=> 2020-01-17 22:16:49 +0900 t2 - 2592000 #=> 2019-12-18 22:16:49 +0900
self <=> other -> -1 | 0 | 1 | nil[permalink][rdoc]-
self と other の時刻を比較します。self の方が大きい場合は 1 を、等しい場合は 0 を、小さい場合は -1 を返します。比較できない場合は、nil を返します。
- [PARAM] other:
- 自身と比較したい時刻を Time オブジェクトで指定します。
例:
t = Time.now # => 2017-11-10 04:42:19 +0900 t2 = t + 2592000 # => 2017-12-10 04:42:19 +0900 t <=> t2 # => -1 t2 <=> t # => 1 t = Time.now # => 2017-11-10 04:42:19 +0900 t2 = t + 0.1 # => 2017-11-10 04:42:19 +0900 t.nsec # => 98222999 t2.nsec # => 198222999 t <=> t2 # => -1 t2 <=> t # => 1 t <=> t # => 0
asctime -> String[permalink][rdoc]ctime -> String-
時刻を asctime(3) の形式の文字列に変換します。ただし、末尾の改行文字 "\n" は含まれません。
戻り値の文字エンコーディングは Encoding::US_ASCII です。
例:
Time.now.asctime # => "Fri Nov 10 00:00:32 2017" Time.now.asctime.encoding # => #<Encoding:US-ASCII> Time.now.ctime # => "Fri Nov 10 00:00:32 2017"
mday -> Integer[permalink][rdoc]day -> Integer-
日を整数で返します。
p Time.local(2000, 1, 1).day #=> 1
isdst -> bool[permalink][rdoc]dst? -> bool-
自身が表す日時が夏時間なら true を返します。そうでないなら false を返します。
ENV['TZ'] = 'US/Pacific' Time.local(2000, 7, 1).isdst #=> true Time.local(2000, 1, 1).isdst #=> false
eql?(other) -> bool[permalink][rdoc]-
other が Time かそのサブクラスのインスタンスであり自身と時刻が等しい場合に true を返します。そうでない場合に false を返します。
- [PARAM] other:
- 自身と比較したい時刻を Time オブジェクトを指定します。
例:
Time.local(2000, 1, 1).eql?(Time.local(2000, 1, 1)) # => true Time.local(2000, 1, 1).eql?(Time.local(2000, 1, 2)) # => false
friday? -> bool[permalink][rdoc]-
自身の表す時刻が金曜日である場合に true を返します。そうでない場合に false を返します。
例:
t = Time.local(1987, 12, 18) #=> 1987-12-18 00:00:00 +0900 t.friday? #=> true
getgm -> Time[permalink][rdoc]getutc -> Time-
タイムゾーンを協定世界時に設定した Time オブジェクトを新しく生成して返します。
t = Time.local(2000,1,1,20,15,1) #=> 2000-01-01 20:15:01 +0900 t.gmt? #=> false y = t.getgm #=> 2000-01-01 11:15:01 UTC y.gmt? #=> true t == y #=> true
getlocal -> Time[permalink][rdoc]getlocal(utc_offset) -> Time-
タイムゾーンを地方時に設定した Time オブジェクトを新しく生成して返します。
- [PARAM] utc_offset:
- タイムゾーンを地方時に設定する代わりに協定世界時との時差を、秒を単位とする整数か、"+HH:MM" "-HH:MM" 形式の文字列で指定します。
t = Time.utc(2000,1,1,20,15,1) #=> 2000-01-01 20:15:01 UTC t.utc? #=> true l = t.getlocal #=> 2000-01-02 05:15:01 +0900 l.utc? #=> false t == l #=> true j = t.getlocal("+09:00") #=> 2000-01-02 05:15:01 +0900 j.utc? #=> false t == j #=> true gmt? -> bool[permalink][rdoc]utc? -> bool-
self のタイムゾーンが協定世界時に設定されていれば真を返します。
t = Time.local(2017,9,19,15,0,0) # => 2017-09-19 15:00:00 +0900 t.utc? # => false utc_t = t.getutc # => 2017-09-19 06:00:00 UTC utc_t.utc? # => true
utc_offset -> Integer[permalink][rdoc]gmt_offset -> Integergmtoff -> Integer-
協定世界時との時差を秒を単位とする数値として返します。
地方時が協定世界時よりも進んでいる場合(アジア、オーストラリアなど) には正の値、遅れている場合(アメリカなど)には負の値になります。
p Time.now.zone # => "JST" p Time.now.utc_offset # => 32400
タイムゾーンが協定世界時に設定されている場合は 0 を返します。
p Time.now.zone # => "JST" p Time.now.getgm.utc_offset # => 0
gmtime -> self[permalink][rdoc]utc -> self-
タイムゾーンを協定世界時に設定します。
このメソッドを呼び出した後は時刻変換を協定世界時として行ないます。
Time#localtime, Time#gmtime の挙動はシステムの localtime(3) の挙動に依存します。Time クラスでは時刻を起算時からの経過秒数として保持していますが、ある特定の時刻までの経過秒は、システムがうるう秒を勘定するかどうかによって異なる場合があります。システムを越えて Time オブジェクトを受け渡す場合には注意する必要があります。
t = Time.now #=> 2019-12-18 22:16:49 +0900 t.gmt? #=> false t.gmtime #=> 2019-12-18 13:16:49 UTC t.gmt? #=> true
hash -> Integer[permalink][rdoc]-
自身のハッシュ値を返します。
- [RETURN]
- ハッシュ値を返します。
[SEE_ALSO] Object#hash
hour -> Integer[permalink][rdoc]-
時を整数で返します。
例:
t = Time.now # => 2017-09-18 07:45:05 +0900 p t.hour # => 7
localtime -> self[permalink][rdoc]localtime(utc_offset) -> self-
タイムゾーンを地方時に設定します。
このメソッドを呼び出した後は時刻変換を協定地方時として行ないます。
- [PARAM] utc_offset:
- タイムゾーンを地方時に設定する代わりに協定世界時との時差を、秒を単位とする整数か、"+HH:MM" "-HH:MM" 形式の文字列で指定します。
Time#localtime, Time#gmtime の挙動はシステムの localtime(3) の挙動に依存します。Time クラスでは時刻を起算時からの経過秒数として保持していますが、ある特定の時刻までの経過秒は、システムがうるう秒を勘定するかどうかによって異なる場合があります。システムを越えて Time オブジェクトを受け渡す場合には注意する必要があります。
t = Time.utc(2000, "jan", 1, 20, 15, 1) t.utc? #=> true t.localtime #=> 2000-01-02 05:15:01 +0900 t.utc? #=> false t.localtime("+09:00") #=> 2000-01-02 05:15:01 +0900 t.utc? #=> false min -> Integer[permalink][rdoc]-
分を整数で返します。
例:
t = Time.now # => 2017-09-18 07:45:05 +0900 p t.min # => 45
mon -> Integer[permalink][rdoc]month -> Integer-
月を整数で返します。
p Time.local(2000, 1, 1).month #=> 1
monday? -> bool[permalink][rdoc]-
自身の表す時刻が月曜日である場合に true を返します。そうでない場合に false を返します。
例:
t = Time.local(2003, 8, 4) #=> 2003-08-04 00:00:00 +0900 t.monday? #=> true
nsec -> Integer[permalink][rdoc]tv_nsec -> Integer-
時刻のナノ秒の部分を整数で返します。
t = Time.now #=> 2007-11-17 15:18:03 +0900 "%10.9f" % t.to_f #=> "1195280283.536151409" t.nsec #=> 536151406
IEEE 754 浮動小数点数で表現できる精度が違うため、Time#to_fの最小の桁とnsecの最小の桁は異なります。nsecで表される値の方が正確です。
round(ndigits=0) -> Time[permalink][rdoc]-
十進小数点数で指定した桁数の精度で丸めをし、その Time オブジェクトを返します。 (デフォルトは0、つまり小数点の所で丸めます)。
ndigits には 0 以上の整数を渡します。
- [PARAM] ndigits:
- 十進での精度(桁数)
require 'time' t = Time.utc(1999,12,31, 23,59,59) p((t + 0.4).round.iso8601(3)) #=> "1999-12-31T23:59:59.000Z" p((t + 0.49).round.iso8601(3)) #=> "1999-12-31T23:59:59.000Z" p((t + 0.5).round.iso8601(3)) #=> "2000-01-01T00:00:00.000Z" p((t + 1.4).round.iso8601(3)) #=> "2000-01-01T00:00:00.000Z" p((t + 1.49).round.iso8601(3)) #=> "2000-01-01T00:00:00.000Z" p((t + 1.5).round.iso8601(3)) #=> "2000-01-01T00:00:01.000Z" t = Time.utc(1999,12,31, 23,59,59) p (t + 0.123456789).round(4).iso8601(6) #=> "1999-12-31T23:59:59.123500Z"
saturday? -> bool[permalink][rdoc]-
自身の表す時刻が土曜日である場合に true を返します。そうでない場合に false を返します。
例:
t = Time.local(2006, 6, 10) #=> 2006-06-10 00:00:00 +0900 t.saturday? #=> true
sec -> Integer[permalink][rdoc]-
秒を整数で返します。
Time.mktime(2000, 1, 1).sec #=> 0
通常は0から59を返しますが、うるう秒の場合は60を返します。
ENV['TZ'] = 'right/UTC' Time.mktime(2005, 12, 31, 23, 59, 60).sec #=> 60
strftime(format) -> String[permalink][rdoc]-
時刻を format 文字列に従って文字列に変換した結果を返します。
- [PARAM] format:
- フォーマット文字列を指定します。使用できるものは 以下の通りです。
- %A: 曜日の名称(Sunday, Monday ... )
- %a: 曜日の省略名(Sun, Mon ... )
- %B: 月の名称(January, February ... )
- %b: 月の省略名(Jan, Feb ... )
- %C: 世紀 (2009年であれば 20)
- %c: 日付と時刻 (%a %b %e %T %Y)
- %D: 日付 (%m/%d/%y)
- %d: 日(01-31)
- %e: 日。一桁の場合、半角空白で埋める ( 1..31)
- %F: %Y-%m-%d と同等 (ISO 8601の日付フォーマット)
- %G: ISO 8601の暦週の年
- %g: ISO 8601の暦週の年の下2桁(00-99)
- %H: 24時間制の時(00-23)
- %h: %b と同等
- %I: 12時間制の時(01-12)
- %j: 年中の通算日(001-366)
- %k: 24時間制の時。一桁の場合、半角空白で埋める ( 0..23)
- %L: ミリ秒 (000..999)
- %l: 12時間制の時。一桁の場合、半角空白で埋める ( 0..12)
- %M: 分(00-59)
- %m: 月を表す数字(01-12)
- %n: 改行 (\n)
- %N: 秒の小数点以下。桁の指定がない場合は9桁 (ナノ秒)、%6N: マイクロ秒 (6桁)、%3N: ミリ秒 (3桁)
- %P: 午前または午後(am,pm)
- %p: 午前または午後(AM,PM)
- %Q: 1970-01-01 00:00:00 UTC からの経過ミリ秒 (Time#strftime は対応していませんが、Date#strftime で使えます)
- %R: 24時間制の時刻。%H:%M と同等。
- %r: 12時間制の時刻。%I:%M:%S %p と同等。
- %S: 秒(00-60) (60はうるう秒)
- %s: 1970-01-01 00:00:00 UTC からの経過秒
- %T: 24時間制の時刻。%H:%M:%S と同等。
- %t: タブ文字 (\t)
- %U: 週を表す数。最初の日曜日が第1週の始まり(00-53)
- %u: 月曜日を1とした、曜日の数値表現 (1..7)
- %V: ISO 8601形式の暦週 (01..53)
- %v: VMS形式の日付 (%e-%^b-%4Y)
- %W: 週を表す数。最初の月曜日が第1週の始まり(00-53)
- %w: 曜日を表す数。日曜日が0(0-6)
- %X: 時刻 (%Tと同等)
- %x: 日付 (%Dと同等)
- %Y: 西暦を表す数
- %y: 西暦の下2桁(00-99)
- %Z: タイムゾーン (環境依存)
- %z: タイムゾーン。UTCからのオフセット (例 +0900)
- %:z: タイムゾーン。コロンが入ったUTCからのオフセット (例 +09:00)
- %::z: タイムゾーン。コロンが入った秒まで含むUTCからのオフセット (例 +09:00:00)
- %%: %自身
- %+: date(1)の形式 (%a %b %e %H:%M:%S %Z %Y) (Time#strftime は対応していませんが、Date#strftime で使えます)
このメソッドは strftime(3) や glibcの仕様を参考に作成されており、以下のオプションが利用できます。
- ^: 大文字で出力を行なう
- #: 小文字であれば大文字に、大文字であれば小文字に変更する
- -: 左寄せにする(0埋めや空白埋めを行わない)
- _: 空白埋めにする
- 0: 0埋めにする
- 数値: 表示桁数を指定する
EとOは無視されます。
例
様々なISO 8601形式t = Time.now #=> 2019-12-18 22:16:49 +0900 t.strftime("Printed on %m/%d/%Y") #=> "Printed on 12/18/2019" t.strftime("Printed on %m/%-d/%_6Y") #=> "Printed on 12/18/ 2019" t.strftime("at %I:%M%p") #=> "at 10:16PM" t.strftime("at %I:%M%#p") #=> "at 10:16pm"t = Time.new(2001,2,3,4,5,6,"+09:00") t.strftime("%Y%m%d") # => 20010203 Calendar date (basic) t.strftime("%F") # => 2001-02-03 Calendar date (extended) t.strftime("%Y-%m") # => 2001-02 Calendar date, reduced accuracy, specific month t.strftime("%Y") # => 2001 Calendar date, reduced accuracy, specific year t.strftime("%C") # => 20 Calendar date, reduced accuracy, specific century t.strftime("%Y%j") # => 2001034 Ordinal date (basic) t.strftime("%Y-%j") # => 2001-034 Ordinal date (extended) t.strftime("%GW%V%u") # => 2001W056 Week date (basic) t.strftime("%G-W%V-%u") # => 2001-W05-6 Week date (extended) t.strftime("%GW%V") # => 2001W05 Week date, reduced accuracy, specific week (basic) t.strftime("%G-W%V") # => 2001-W05 Week date, reduced accuracy, specific week (extended) t.strftime("%H%M%S") # => 040506 Local time (basic) t.strftime("%T") # => 04:05:06 Local time (extended) t.strftime("%H%M") # => 0405 Local time, reduced accuracy, specific minute (basic) t.strftime("%H:%M") # => 04:05 Local time, reduced accuracy, specific minute (extended) t.strftime("%H") # => 04 Local time, reduced accuracy, specific hour t.strftime("%H%M%S,%L") # => 040506,000 Local time with decimal fraction, comma as decimal sign (basic) t.strftime("%T,%L") # => 04:05:06,000 Local time with decimal fraction, comma as decimal sign (extended) t.strftime("%H%M%S.%L") # => 040506.000 Local time with decimal fraction, full stop as decimal sign (basic) t.strftime("%T.%L") # => 04:05:06.000 Local time with decimal fraction, full stop as decimal sign (extended) t.strftime("%H%M%S%z") # => 040506+0900 Local time and the difference from UTC (basic) t.strftime("%T%:z") # => 04:05:06+09:00 Local time and the difference from UTC (extended) t.strftime("%Y%m%dT%H%M%S%z") # => 20010203T040506+0900 Date and time of day for calendar date (basic) t.strftime("%FT%T%:z") # => 2001-02-03T04:05:06+09:00 Date and time of day for calendar date (extended) t.strftime("%Y%jT%H%M%S%z") # => 2001034T040506+0900 Date and time of day for ordinal date (basic) t.strftime("%Y-%jT%T%:z") # => 2001-034T04:05:06+09:00 Date and time of day for ordinal date (extended) t.strftime("%GW%V%uT%H%M%S%z") # => 2001W056T040506+0900 Date and time of day for week date (basic) t.strftime("%G-W%V-%uT%T%:z") # => 2001-W05-6T04:05:06+09:00 Date and time of day for week date (extended) t.strftime("%Y%m%dT%H%M") # => 20010203T0405 Calendar date and local time (basic) t.strftime("%FT%R") # => 2001-02-03T04:05 Calendar date and local time (extended) t.strftime("%Y%jT%H%MZ") # => 2001034T0405Z Ordinal date and UTC of day (basic) t.strftime("%Y-%jT%RZ") # => 2001-034T04:05Z Ordinal date and UTC of day (extended) t.strftime("%GW%V%uT%H%M%z") # => 2001W056T0405+0900 Week date and local time and difference from UTC (basic) t.strftime("%G-W%V-%uT%R%:z") # => 2001-W05-6T04:05+09:00 Week date and local time and difference from UTC (extended) subsec -> Integer | Rational[permalink][rdoc]-
時刻を表す分数を返します。
Rational を返す場合があります。
t = Time.now #=> 2009-03-26 22:33:12 +0900 "%10.9f" % t.to_f #=> "1238074392.940563917" t.subsec #=> (94056401/100000000)
to_f の値と subsec の値の下のほうの桁の値は異なる場合があります。というのは IEEE 754 double はそれを表すのに十分な精度を持たないからです。subsec で得られる値が正確です。
succ -> Time[permalink][rdoc]-
self に 1 秒足した Time オブジェクトを生成して返します。
このメソッドは obsolete です。 self + 1 を代わりに使用してください。
t = Time.now p t p t.succ # => 2019-12-18 22:16:50 +0900 2019-12-18 22:16:51 +0900 sunday? -> bool[permalink][rdoc]-
自身の表す時刻が日曜日である場合に true を返します。そうでない場合に false を返します。
例:
t = Time.local(1990, 4, 1) #=> 1990-04-01 00:00:00 +0900 t.sunday? #=> true
thursday? -> bool[permalink][rdoc]-
自身の表す時刻が木曜日である場合に true を返します。そうでない場合に false を返します。
例:
t = Time.local(1995, 12, 21) #=> 1995-12-21 00:00:00 +0900 t.thursday? #=> true
to_a -> Array[permalink][rdoc]-
時刻を10要素の配列で返します。
その要素は順序も含めて以下の通りです。
- sec: 秒 (整数 0-60) (60はうるう秒)
- min: 分 (整数 0-59)
- hour: 時 (整数 0-23)
- mday: 日 (整数)
- mon: 月 (整数 1-12)
- year: 年 (整数 2000年=2000)
- wday: 曜日 (整数 0-6)
- yday: 年内通算日 (整数 1-366)
- isdst: 夏時間であるかどうか (true/false)
- zone: タイムゾーン (文字列)
t = Time.now p t p t.to_a # => 2019-12-19 16:37:30 +0900 # => [30, 37, 16, 19, 12, 2019, 4, 353, false, "JST"]
要素の順序は C 言語の tm 構造体に合わせています。ただし、 tm 構造体に zone はありません。
注意: C 言語の tm 構造体とは異なり、month は 1 月に対して 1 を返し、year は 1998 年に対して 1998 を返します。また、 yday は 1 から数えます。
to_f -> Float[permalink][rdoc]-
起算時からの経過秒数を浮動小数点数で返します。1 秒に満たない経過も表現されます。
t = Time.now "%10.5f" % t.to_f #=> "1049896564.13654" t.to_i #=> 1049896564
to_i -> Integer[permalink][rdoc]tv_sec -> Integer-
起算時からの経過秒数を整数で返します。
例:
t = Time.new(2017, 11, 12, 1, 2, 3) p "%10.5f" % t.to_f # => "1510416123.00000" p t.to_i # => 1510416123
to_r -> Rational[permalink][rdoc]-
起算時からの経過秒数を有理数で返します。1 秒に満たない経過も表現されます。
t = Time.now p t.to_r # => (8807170717088293/8388608)
to_s -> String[permalink][rdoc]-
時刻を文字列に変換した結果を返します。以下のようにフォーマット文字列を使って strftime を呼び出すのと同じです。
t = Time.now t.to_s #=> "2019-12-18 22:16:49 +0900" t.strftime("%Y-%m-%d %H:%M:%S %z") #=> "2019-12-18 22:16:49 +0900" t.utc.to_s #=> "2019-12-18 13:16:49 UTC" t.strftime("%Y-%m-%d %H:%M:%S UTC") #=> "2019-12-18 13:16:49 UTC"戻り値の文字エンコーディングは Encoding::US_ASCII です。
tuesday? -> bool[permalink][rdoc]-
自身の表す時刻が火曜日である場合に true を返します。そうでない場合に false を返します。
例:
t = Time.local(1991, 2, 19) #=> 1991-02-19 00:00:00 +0900 t.tuesday? #=> true
usec -> Integer[permalink][rdoc]tv_usec -> Integer-
時刻のマイクロ秒の部分を整数で返します。
例:
t = Time.now #=> 2017-09-18 07:45:05 +0900 "%10.6f" % t.to_f #=> "1505688305.417368" t.usec #=> 417368
wday -> Integer[permalink][rdoc]-
曜日を0(日曜日)から6(土曜日)の整数で返します。
sun = Time.new(2017, 9, 17, 10, 34, 15, '+09:00') #=> 2017-09-17 10:34:15 +0900 sun.wday #=> 0 mon = Time.new(2017, 9, 18, 10, 34, 15, '+09:00') #=> 2017-09-18 10:34:15 +0900 mon.wday #=> 1 tue = Time.new(2017, 9, 19, 10, 34, 15, '+09:00') #=> 2017-09-19 10:34:15 +0900 tue.wday #=> 2 wed = Time.new(2017, 9, 20, 10, 34, 15, '+09:00') #=> 2017-09-20 10:34:15 +0900 wed.wday #=> 3 thu = Time.new(2017, 9, 21, 10, 34, 15, '+09:00') #=> 2017-09-21 10:34:15 +0900 thu.wday #=> 4 fri = Time.new(2017, 9, 22, 10, 34, 15, '+09:00') #=> 2017-09-22 10:34:15 +0900 fri.wday #=> 5 sat = Time.new(2017, 9, 23, 10, 34, 15, '+09:00') #=> 2017-09-23 10:34:15 +0900 sat.wday #=> 6
wednesday? -> bool[permalink][rdoc]-
自身の表す時刻が水曜日である場合に true を返します。そうでない場合に false を返します。
例:
t = Time.local(1993, 2, 24) #=> 1993-02-24 00:00:00 +0900 t.wednesday? #=> true
yday -> Integer[permalink][rdoc]-
1月1日を1とした通算日(1から366まで)を整数で返します。
Time.mktime(2000, 1, 1).yday #=> 1
うるう年の場合は、2月29日も含めた通算日を返します。
# うるう年でない場合 Time.mktime(2003, 1, 1).yday #=> 1 Time.mktime(2003, 3, 1).yday #=> 60 Time.mktime(2003, 12, 31).yday #=> 365 # うるう年の場合 Time.mktime(2004, 1, 1).yday #=> 1 Time.mktime(2004, 2, 29).yday #=> 60 Time.mktime(2004, 12, 31).yday #=> 366
year -> Integer[permalink][rdoc]-
年を整数で返します。
p Time.local(2000, 1, 1).year #=> 2000
zone -> String[permalink][rdoc]-
タイムゾーンを表す文字列を返します。
p Time.now.zone #=> "JST"
追加されるメソッド
httpdate -> String[permalink][rdoc] [added by time]-
[RFC2616] で定義されている HTTP-date の rfc1123-date 形式の文字列を返します。
- [RETURN]
-
以下の形式の文字列を返します。
day-of-week, DD month-name CCYY hh:mm:ss GMT
注意: 結果はいつも UTC (GMT) です。
使用例
require 'time' iso8601_time = '2008-08-31T12:34:56+09:00' t = Time.iso8601(iso8601_time) p t.httpdate #=> "Sun, 31 Aug 2008 03:34:56 GMT"
httpdate(date) -> Time[permalink][rdoc] [added by time]-
[RFC2616]で定義されているHTTP-dateとしてdateをパースして Timeオブジェクトに変換します。
dateが[RFC2616]に準拠していない、または Timeクラスが指定された日時を表現できないときにArgumentErrorが発生します。
- [PARAM] date:
- [RFC2616]で定義されているHTTP-dateとしてパースされる文字列を指定します。
- [EXCEPTION] ArgumentError:
- dateが[RFC2616]に準拠していない、または Timeクラスが指定された日時を表現できないときに発生します。
require 'time' rfc2616_time = 'Sun, 31 Aug 2008 12:34:56 GMT' t = Time.httpdate(rfc2616_time) p t.kind_of?(Time) #=> true non_rfc2616_time = 'San, 31 Aug 2008 12:34:56 GMT' begin Time.httpdate(non_rfc2616_time) rescue ArgumentError => err puts err #=> not RFC 2616 compliant date: "San, 31 Aug 2008 12:34:56 GMT" end
xmlschema(fractional_seconds = 0) -> String[permalink][rdoc] [added by time]iso8601(fractional_seconds = 0) -> String[added by time]-
XML Schema で定義されている dateTime として表現される形式の文字列を返します。
XML Schema で定義されている dateTime として表現される形式の文字列をパースするためのクラスメソッド Time.iso8601, Time.xmlschema もあります。
- [PARAM] fractional_seconds:
- 小数点以下の秒の桁数を整数で指定します。省略した場合は0 となります。
- [RETURN]
-
以下の形式の文字列を返します。
CCYY-MM-DDThh:mm:ssTZD CCYY-MM-DDThh:mm:ss.sssTZD
ただし TZD は Z または [+-]hh:mm です。
使用例
require 'time' iso8601_time = '2008-08-31T12:34:56+09:00' t = Time.iso8601(iso8601_time) p t.xmlschema #=> "2008-08-31T03:34:56Z" p t.xmlschema(9) #=> "2008-08-31T03:34:56.000000000Z"
[SEE_ALSO] Time.iso8601, Time.xmlschema
xmlschema(date) -> Time[permalink][rdoc] [added by time]iso8601(date) -> Time[added by time]-
XML Schema で定義されている dateTime として date をパースして Time オブジェクトに変換します。
date がISO 8601で定義されている形式に準拠していない、または Time クラスが指定された日時を表現できないときに ArgumentError が発生します。
Time オブジェクトを ISO8601 形式の文字列にフォーマットするインスタンスメソッド Time#iso8601, Time#xmlschema もあります。
- [PARAM] date:
- XML Schema で定義されている dateTime としてパースされる文字列を指定します。
- [EXCEPTION] ArgumentError:
- date がISO 8601で定義されている形式に準拠していない、または Time クラスが指定された日時を表現できないときに発生します。
使用例
require 'time' iso8601_time = '2008-08-31T12:34:56+09:00' t = Time.iso8601(iso8601_time) p t #=> 2008-08-31 12:34:56 +0900 p t.kind_of?(Time) #=> true begin non_iso8601_time = '2008-08-31A12:34:56+09:00' Time.iso8601(non_iso8601_time) rescue ArgumentError => err puts err #=> invalid date: "2008-08-31A12:34:56+09:00" end
[SEE_ALSO] Time#xmlschema, Time#iso8601
json_create(hash) -> Time[permalink][rdoc] [added by json/add/time]-
JSON のオブジェクトから Ruby のオブジェクトを生成して返します。
- [PARAM] hash:
- 適切なキーを持つハッシュを指定します。
parse(date, now = Time.now) -> Time[permalink][rdoc] [added by time]parse(date, now = Time.now) {|year| year } -> Time[added by time]-
date を Date._parse によってパースして Timeオブジェクトに変換します。
ブロック付きで呼ばれた場合、dateの年はブロックによって変換されます。
require 'time' Time.parse(...) {|y| y < 100 ? (y >= 69 ? y + 1900 : y + 2000) : y}与えられた時刻に上位の要素がなかったり壊れていた場合、nowの該当要素が使われます。
require 'time' time = Time.local(2019, 5, 1) Time.parse("12:00", time) #=> 2019-05-01 12:00:00 +0900下位の要素がなかったり壊れていた場合、最小値(1か0)が使われます。
- [PARAM] date:
- Time オブジェクトに変換可能な文字列を指定します。
- [PARAM] now:
- 現在時刻をTime オブジェクトで指定します。デフォルトはTime.nowとなります。
- [EXCEPTION] ArgumentError:
- dateに空文字列を与えた場合、発生します。なお、1.9.2より前は例外は発生せず、現在時刻を表す Time のインスタンスを返していました。
require 'time' # 現在時刻が "Thu Nov 29 14:33:20 GMT 2001" で # タイムゾーンがGMTとすると: Time.parse("16:30") #=> Thu Nov 29 16:30:00 GMT 2001 Time.parse("7/23") #=> Mon Jul 23 00:00:00 GMT 2001 Time.parse("2002/1") #=> Tue Jan 01 00:00:00 GMT 2002Date._parseがdateから情報を取り出せないとき、または Time クラスが指定された日時を表現できないときに ArgumentError が発生します。
このメソッドは他のパース用メソッドのフェイルセーフとして以下のように使用できます:
require 'time' Time.rfc2822(date) rescue Time.parse(date) Time.httpdate(date) rescue Time.parse(date) Time.xmlschema(date) rescue Time.parse(date)
従って Time.parse の失敗はチェックすべきです。
rfc2822 -> String[permalink][rdoc] [added by time]rfc822 -> String[added by time]-
[RFC2822] で定義されている date-time として表現される形式の文字列を返します。
- [RETURN]
-
以下の形式の文字列を返します。
day-of-week, DD month-name CCYY hh:mm:ss zone
ただし zone は [+-]hhmm です。 self が UTC time の場合、zone は +0000 になります。
使用例
require 'time' iso8601_time = '2008-08-31T12:34:56+09:00' t = Time.iso8601(iso8601_time) p t.rfc2822 #=> "Sun, 31 Aug 2008 03:34:56 -0000"
rfc2822(date) -> Time[permalink][rdoc] [added by time]rfc822(date) -> Time[added by time]-
[RFC2822]で定義されているdate-timeとしてdateをパースして Timeオブジェクトに変換します。この形式は[RFC822]で定義されて[RFC1123]で更新された形式と同じです。
dateが[RFC2822]に準拠していない、または Timeクラスが指定された日時を表現できないときにArgumentErrorが発生します。
- [PARAM] date:
- [RFC2822] で定義されるdate-time として文字列を指定します。
- [EXCEPTION] ArgumentError:
- dateが[RFC2822]に準拠していない、または Timeクラスが指定された日時を表現できないときに発生します。
使用例
require 'time' rfc2822_time = 'Sun, 31 Aug 2008 12:08:19 +0900' t = Time.rfc2822(rfc2822_time) p t.kind_of?(Time) #=> true non_rfc2822_time = 'Sun 31 Aug 2008 12:08:19 +0900' begin p Time.rfc2822(non_rfc2822_time) rescue ArgumentError => err puts "format err: #{err}" end strptime(date, format, now=self.now) -> Time[permalink][rdoc] [added by time]strptime(date, format, now=self.now) {|y| ... } -> Time[added by time]-
文字列を Date._strptime を用いて Time オブジェクトに変換します。
require 'time' Time.strptime('2001-02-03T04:05:06+09:00', '%Y-%m-%dT%H:%M:%S%z') #=> 2001-02-03 06:05:06 +0900ブロックを渡すと年の部分をブロックによって変換できます。
require 'time' Time.strptime('91/5/18 4:13:00', '%Y/%m/%d %T'){|y| if y > 100 then y elsif y >= 69 then y + 1900 else y + 2000 end } #=> 1991-05-18 04:13:00 +0900 Time.strptime('01/5/18 4:13:00', '%Y/%m/%d %T'){|y| if y > 100 then y elsif y >= 69 then y + 1900 else y + 2000 end } #=> 2001-05-18 04:13:00 +0900詳しくは DateTime.strptime, Date.strptime を見てください。
- [PARAM] date:
- 時刻を表す文字列
- [PARAM] format:
- 書式文字列
to_date -> Date[permalink][rdoc] [added by date]-
対応する Date オブジェクトを返します。
to_datetime -> DateTime[permalink][rdoc] [added by date]-
対応する DateTime オブジェクトを返します。
to_json(*args) -> String[permalink][rdoc] [added by json/add/time]-
自身を JSON 形式の文字列に変換して返します。
内部的にはハッシュにデータをセットしてから JSON::Generator::GeneratorMethods::Hash#to_json を呼び出しています。
- [PARAM] args:
- 引数はそのまま JSON::Generator::GeneratorMethods::Hash#to_json に渡されます。
require "json/add/core" Time.now.to_json # => "{\"json_class\":\"Time\",\"s\":1544968675,\"n\":676167000}" to_time -> Time[permalink][rdoc] [added by date]-
対応する Time オブジェクトを返します。