Movatterモバイル変換


[0]ホーム

URL:


HomeClassesMethods

In Files

  • time.c

Parent

Object

Methods

Included Modules

Files

Class/Module Index[+]

Quicksearch
No matching classes.

Time

Time is an abstraction of dates and times.Time is stored internally as the number of secondswith subsecond since theEpoch, 1970-01-01 00:00:00 UTC.

TheTime class treats GMT (Greenwich MeanTime) and UTC (Coordinated UniversalTime) as equivalent. GMT is the older way of referringto these baseline times but persists in the names of calls on POSIXsystems.

All times may have subsecond. Be aware of this fact when comparing timeswith each other – times that are apparently equal when displayed may bedifferent when compared. (Since Ruby 2.7.0,#inspect shows subsecond but#to_s still doesn't show subsecond.)

Since Ruby 1.9.2,Time implementation uses a signed63 bit integer, Bignum orRational. The integeris a number of nanoseconds since theEpoch which can represent1823-11-12 to 2116-02-20. When Bignum orRational is used (before 1823, after 2116, undernanosecond),Time works slower as when integer isused.

Examples

All of these examples were done using the EST timezone which is GMT-5.

Creating a newTime instance

You can create a new instance ofTime with::new. This will use the current systemtime.::now is an alias for this. Youcan also pass parts of the time to::new such as year, month, minute, etc.When you want to construct a time this way you must pass at least a year.If you pass the year with nothing else time will default to January 1 ofthat year at 00:00:00 with the current system timezone. Here are someexamples:

Time.new(2002)#=> 2002-01-01 00:00:00 -0500Time.new(2002,10)#=> 2002-10-01 00:00:00 -0500Time.new(2002,10,31)#=> 2002-10-31 00:00:00 -0500

You can pass a UTC offset:

Time.new(2002,10,31,2,2,2,"+02:00")#=> 2002-10-31 02:02:02 +0200

Or a timezone object:

tz =timezone("Europe/Athens")# Eastern European Time, UTC+2Time.new(2002,10,31,2,2,2,tz)#=> 2002-10-31 02:02:02 +0200

You can also use::local and::utc to infer local and UTC timezonesinstead of using the current system setting.

You can also create a new time using::at which takes the number of seconds(with subsecond) since theUnix Epoch.

Time.at(628232400)#=> 1989-11-28 00:00:00 -0500

Working with an instance ofTime

Once you have an instance ofTime there is amultitude of things you can do with it. Below are some examples. For all ofthe following examples, we will work on the assumption that you have donethe following:

t =Time.new(1993,02,24,12,0,0,"+09:00")

Was that a monday?

t.monday?#=> false

What year was that again?

t.year#=> 1993

Was it daylight savings at the time?

t.dst?#=> false

What's the day a year later?

t+ (60*60*24*365)#=> 1994-02-24 12:00:00 +0900

How many seconds was that since the Unix Epoch?

t.to_i#=> 730522800

You can also do standard functions like compare two times.

t1 =Time.new(2010)t2 =Time.new(2011)t1==t2#=> falset1==t1#=> truet1<t2#=> truet1>t2#=> falseTime.new(2010,10,31).between?(t1,t2)#=> true

Timezone argument

A timezone argument must havelocal_to_utc andutc_to_local methods, and may havename,abbr, anddst? methods.

Thelocal_to_utc method should convert a Time-like object fromthe timezone to UTC, andutc_to_local is the opposite. Theresult also should be aTime or Time-like object(not necessary to be the same class). Thezone of the result is just ignored.Time-like argument to these methods is similar to aTime object in UTC without subsecond; it has attributereaders for the parts, e.g.year,month, and so on, and epoch timereaders,to_i. The subsecondattributes are fixed as 0, andutc_offset,zone,isdst, and their aliases are same as aTime object in UTC. Also to_time, #+, and #-methods are defined.

Thename method is used for marshaling. If this method is notdefined on a timezone object,Time objects usingthat timezone object can not be dumped byMarshal.

Theabbr method is used by '%Z' instrftime.

Thedst? method is called with aTime value andshould return whether theTime value is in daylight savingstime in the zone.

Auto conversion to Timezone

At loading marshaled data, a timezone name will be converted to a timezoneobject byfind_timezone class method, if the method isdefined.

Similarly, that class method will be called when a timezone argument doesnot have the necessary methods mentioned above.

Public Class Methods

at(time) → timeclick to toggle source
at(seconds_with_frac) → time
at(seconds, microseconds_with_frac) → time
at(seconds, milliseconds, :millisecond) → time
at(seconds, microseconds, :usec) → time
at(seconds, microseconds, :microsecond) → time
at(seconds, nanoseconds, :nsec) → time
at(seconds, nanoseconds, :nanosecond) → time
at(time, in: tz) → time
at(seconds_with_frac, in: tz) → time
at(seconds, microseconds_with_frac, in: tz) → time
at(seconds, milliseconds, :millisecond, in: tz) → time
at(seconds, microseconds, :usec, in: tz) → time
at(seconds, microseconds, :microsecond, in: tz) → time
at(seconds, nanoseconds, :nsec, in: tz) → time
at(seconds, nanoseconds, :nanosecond, in: tz) → time

Creates a newTime object with the value given bytime, the given number ofseconds_with_frac, orseconds andmicroseconds_with_frac since theEpoch.seconds_with_frac andmicroseconds_with_frac can be anInteger,Float,Rational, or otherNumeric.

Ifin argument is given, the result is in that timezone or UTCoffset, or if a numeric argument is given, the result is in local time. Thein argument accepts the same types of arguments astz argument of::new:string, number of seconds, or a timezone object.

Time.at(0)#=> 1969-12-31 18:00:00 -0600Time.at(Time.at(0))#=> 1969-12-31 18:00:00 -0600Time.at(946702800)#=> 1999-12-31 23:00:00 -0600Time.at(-284061600)#=> 1960-12-31 00:00:00 -0600Time.at(946684800.2).usec#=> 200000Time.at(946684800,123456.789).nsec#=> 123456789Time.at(946684800,123456789, :nsec).nsec#=> 123456789Time.at(1582721899,in:"+09:00")#=> 2020-02-26 21:58:19 +0900Time.at(1582721899,in:"UTC")#=> 2020-02-26 12:58:19 UTCTime.at(1582721899,in:"C")#=> 2020-02-26 13:58:19 +0300Time.at(1582721899,in:32400)#=> 2020-02-26 21:58:19 +0900require'tzinfo'Time.at(1582721899,in:TZInfo::Timezone.get('Europe/Kiev'))#=> 2020-02-26 14:58:19 +0200
                static VALUEtime_s_at(int argc, VALUE *argv, VALUE klass){    VALUE time, t, unit = Qundef, zone = Qundef, opts;    VALUE vals[TMOPT_MAX_];    wideval_t timew;    argc = rb_scan_args(argc, argv, "12:", &time, &t, &unit, &opts);    if (get_tmopt(opts, vals)) {        zone = vals[0];    }    if (argc >= 2) {        int scale = argc == 3 ? get_scale(unit) : 1000000;        time = num_exact(time);        t = num_exact(t);        timew = wadd(rb_time_magnify(v2w(time)), wmulquoll(v2w(t), TIME_SCALE, scale));        t = time_new_timew(klass, timew);    }    else if (IsTimeval(time)) {        struct time_object *tobj, *tobj2;        GetTimeval(time, tobj);        t = time_new_timew(klass, tobj->timew);        GetTimeval(t, tobj2);        TZMODE_COPY(tobj2, tobj);    }    else {        timew = rb_time_magnify(v2w(num_exact(time)));        t = time_new_timew(klass, timew);    }    if (zone != Qundef) {        time_zonelocal(t, zone);    }    return t;}
gm(year) → timeclick to toggle source
gm(year, month) → time
gm(year, month, day) → time
gm(year, month, day, hour) → time
gm(year, month, day, hour, min) → time
gm(year, month, day, hour, min, sec_with_frac) → time
gm(year, month, day, hour, min, sec, usec_with_frac) → time
gm(sec, min, hour, day, month, year, dummy, dummy, dummy, dummy) → time

Creates aTime object based on given values,interpreted as UTC (GMT). The year must be specified. Other values defaultto the minimum value for that field (and may benil oromitted). Months may be specified by numbers from 1 to 12, or by thethree-letter English month names. Hours are specified on a 24-hour clock(0..23). Raises anArgumentError if anyvalues are out of range. Will also accept ten arguments in the order outputby#to_a.

sec_with_frac andusec_with_frac can have afractional part.

Time.utc(2000,"jan",1,20,15,1)#=> 2000-01-01 20:15:01 UTCTime.gm(2000,"jan",1,20,15,1)#=> 2000-01-01 20:15:01 UTC
                static VALUEtime_s_mkutc(int argc, VALUE *argv, VALUE klass){    struct vtm vtm;    time_arg(argc, argv, &vtm);    return time_gmtime(time_new_timew(klass, timegmw(&vtm)));}
local(year) → timeclick to toggle source
local(year, month) → time
local(year, month, day) → time
local(year, month, day, hour) → time
local(year, month, day, hour, min) → time
local(year, month, day, hour, min, sec_with_frac) → time
local(year, month, day, hour, min, sec, usec_with_frac) → time
local(sec, min, hour, day, month, year, dummy, dummy, isdst, dummy) → time

Same as::utc, but interprets thevalues in the local time zone.

Time.local(2000,"jan",1,20,15,1)#=> 2000-01-01 20:15:01 -0600
                static VALUEtime_s_mktime(int argc, VALUE *argv, VALUE klass){    struct vtm vtm;    time_arg(argc, argv, &vtm);    return time_localtime(time_new_timew(klass, timelocalw(&vtm)));}
mktime(year) → timeclick to toggle source
mktime(year, month) → time
mktime(year, month, day) → time
mktime(year, month, day, hour) → time
mktime(year, month, day, hour, min) → time
mktime(year, month, day, hour, min, sec_with_frac) → time
mktime(year, month, day, hour, min, sec, usec_with_frac) → time
mktime(sec, min, hour, day, month, year, dummy, dummy, isdst, dummy) → time

Same as::utc, but interprets thevalues in the local time zone.

Time.local(2000,"jan",1,20,15,1)#=> 2000-01-01 20:15:01 -0600
                static VALUEtime_s_mktime(int argc, VALUE *argv, VALUE klass){    struct vtm vtm;    time_arg(argc, argv, &vtm);    return time_localtime(time_new_timew(klass, timelocalw(&vtm)));}
new → timeclick to toggle source
new(year, month=nil, day=nil, hour=nil, min=nil, sec=nil, tz=nil) → time

Returns aTime object.

It is initialized to the current system time if no argument is given.

Note: The new object will use the resolution available onyour system clock, and may include subsecond.

If one or more arguments are specified, the time is initialized to thespecified time.

sec may have subsecond if it is a rational.

tz specifies the timezone. It can be an offset from UTC, giveneither as a string such as “+09:00” or a single letter “A”..“Z” excluding“J” (so-called military time zone), or as a number of seconds such as32400. Or it can be a timezone object, seeTimezone argument fordetails.

a =Time.new#=> 2020-07-21 01:27:44.917547285 +0900b =Time.new#=> 2020-07-21 01:27:44.917617713 +0900a==b#=> false"%.6f"%a.to_f#=> "1595262464.917547""%.6f"%b.to_f#=> "1595262464.917618"Time.new(2008,6,21,13,30,0,"+09:00")#=> 2008-06-21 13:30:00 +0900# A trip for RubyConf 2007t1 =Time.new(2007,11,1,15,25,0,"+09:00")# JST (Narita)t2 =Time.new(2007,11,1,12,5,0,"-05:00")# CDT (Minneapolis)t3 =Time.new(2007,11,1,13,25,0,"-05:00")# CDT (Minneapolis)t4 =Time.new(2007,11,1,16,53,0,"-04:00")# EDT (Charlotte)t5 =Time.new(2007,11,5,9,24,0,"-05:00")# EST (Charlotte)t6 =Time.new(2007,11,5,11,21,0,"-05:00")# EST (Detroit)t7 =Time.new(2007,11,5,13,45,0,"-05:00")# EST (Detroit)t8 =Time.new(2007,11,6,17,10,0,"+09:00")# JST (Narita)(t2-t1)/3600.0#=> 10.666666666666666(t4-t3)/3600.0#=> 2.466666666666667(t6-t5)/3600.0#=> 1.95(t8-t7)/3600.0#=> 13.416666666666666
                static VALUEtime_init(int argc, VALUE *argv, VALUE time){    if (argc == 0)        return time_init_0(time);    else        return time_init_1(argc, argv, time);}
now → timeclick to toggle source

Creates a newTime object for the current time.This is same as::new withoutarguments.

Time.now#=> 2009-06-24 12:39:54 +0900
                static VALUEtime_s_now(int argc, VALUE *argv, VALUE klass){    VALUE vals[TMOPT_MAX_], opts, t, zone = Qundef;    rb_scan_args(argc, argv, ":", &opts);    if (get_tmopt(opts, vals)) zone = vals[TMOPT_IN];    t = rb_class_new_instance(0, NULL, klass);    if (zone != Qundef) {        time_zonelocal(t, zone);    }    return t;}
utc(year) → timeclick to toggle source
utc(year, month) → time
utc(year, month, day) → time
utc(year, month, day, hour) → time
utc(year, month, day, hour, min) → time
utc(year, month, day, hour, min, sec_with_frac) → time
utc(year, month, day, hour, min, sec, usec_with_frac) → time
utc(sec, min, hour, day, month, year, dummy, dummy, dummy, dummy) → time

Creates aTime object based on given values,interpreted as UTC (GMT). The year must be specified. Other values defaultto the minimum value for that field (and may benil oromitted). Months may be specified by numbers from 1 to 12, or by thethree-letter English month names. Hours are specified on a 24-hour clock(0..23). Raises anArgumentError if anyvalues are out of range. Will also accept ten arguments in the order outputby#to_a.

sec_with_frac andusec_with_frac can have afractional part.

Time.utc(2000,"jan",1,20,15,1)#=> 2000-01-01 20:15:01 UTCTime.gm(2000,"jan",1,20,15,1)#=> 2000-01-01 20:15:01 UTC
                static VALUEtime_s_mkutc(int argc, VALUE *argv, VALUE klass){    struct vtm vtm;    time_arg(argc, argv, &vtm);    return time_gmtime(time_new_timew(klass, timegmw(&vtm)));}

Public Instance Methods

time + numeric → timeclick to toggle source

Adds some number of seconds (possibly including subsecond) totimeand returns that value as a newTime object.

t =Time.now#=> 2020-07-20 22:14:43.170490982 +0900t+ (60*60*24)#=> 2020-07-21 22:14:43.170490982 +0900
                static VALUEtime_plus(VALUE time1, VALUE time2){    struct time_object *tobj;    GetTimeval(time1, tobj);    if (IsTimeval(time2)) {        rb_raise(rb_eTypeError, "time + time?");    }    return time_add(tobj, time1, time2, 1);}
time - other_time → floatclick to toggle source
time - numeric → time

Returns a difference in seconds as aFloat betweentime andother_time, or subtracts the given number ofseconds innumeric fromtime.

t =Time.now#=> 2020-07-20 22:15:49.302766336 +0900t2 =t+2592000#=> 2020-08-19 22:15:49.302766336 +0900t2-t#=> 2592000.0t2-2592000#=> 2020-07-20 22:15:49.302766336 +0900
                static VALUEtime_minus(VALUE time1, VALUE time2){    struct time_object *tobj;    GetTimeval(time1, tobj);    if (IsTimeval(time2)) {        struct time_object *tobj2;        GetTimeval(time2, tobj2);        return rb_Float(rb_time_unmagnify_to_float(wsub(tobj->timew, tobj2->timew)));    }    return time_add(tobj, time1, time2, -1);}
time<=> other_time → -1, 0, +1, or nilclick to toggle source

Comparestime withother_time.

-1, 0, +1 or nil depending on whethertime is less than, equalto, or greater thanother_time.

nil is returned if the two values are incomparable.

t =Time.now#=> 2007-11-19 08:12:12 -0600t2 =t+2592000#=> 2007-12-19 08:12:12 -0600t<=>t2#=> -1t2<=>t#=> 1t =Time.now#=> 2007-11-19 08:13:38 -0600t2 =t+0.1#=> 2007-11-19 08:13:38 -0600t.nsec#=> 98222999t2.nsec#=> 198222999t<=>t2#=> -1t2<=>t#=> 1t<=>t#=> 0
                static VALUEtime_cmp(VALUE time1, VALUE time2){    struct time_object *tobj1, *tobj2;    int n;    GetTimeval(time1, tobj1);    if (IsTimeval(time2)) {        GetTimeval(time2, tobj2);        n = wcmp(tobj1->timew, tobj2->timew);    }    else {        return rb_invcmp(time1, time2);    }    if (n == 0) return INT2FIX(0);    if (n > 0) return INT2FIX(1);    return INT2FIX(-1);}
asctime → stringclick to toggle source

Returns a canonical string representation oftime.

Time.now.asctime#=> "Wed Apr  9 08:56:03 2003"Time.now.ctime#=> "Wed Apr  9 08:56:03 2003"
                static VALUEtime_asctime(VALUE time){    return strftimev("%a %b %e %T %Y", time, rb_usascii_encoding());}
ceil([ndigits]) → new_timeclick to toggle source

Ceils subsecond to a given precision in decimal digits (0 digits bydefault). It returns a newTime object.ndigits should be zero or a positive integer.

t =Time.utc(2010,3,30,5,43,25.0123456789r)t#=> 2010-03-30 05:43:25 123456789/10000000000 UTCt.ceil#=> 2010-03-30 05:43:26 UTCt.ceil(0)#=> 2010-03-30 05:43:26 UTCt.ceil(1)#=> 2010-03-30 05:43:25.1 UTCt.ceil(2)#=> 2010-03-30 05:43:25.02 UTCt.ceil(3)#=> 2010-03-30 05:43:25.013 UTCt.ceil(4)#=> 2010-03-30 05:43:25.0124 UTCt =Time.utc(1999,12,31,23,59,59)(t+0.4).ceil#=> 2000-01-01 00:00:00 UTC(t+0.9).ceil#=> 2000-01-01 00:00:00 UTC(t+1.4).ceil#=> 2000-01-01 00:00:01 UTC(t+1.9).ceil#=> 2000-01-01 00:00:01 UTCt =Time.utc(1999,12,31,23,59,59)(t+0.123456789).ceil(4)#=> 1999-12-31 23:59:59.1235 UTC
                static VALUEtime_ceil(int argc, VALUE *argv, VALUE time){    VALUE ndigits, v, den;    struct time_object *tobj;    if (!rb_check_arity(argc, 0, 1) || NIL_P(ndigits = argv[0]))        den = INT2FIX(1);    else        den = ndigits_denominator(ndigits);    GetTimeval(time, tobj);    v = w2v(rb_time_unmagnify(tobj->timew));    v = modv(v, den);    if (!rb_equal(v, INT2FIX(0))) {        v = subv(den, v);    }    return time_add(tobj, time, v, 1);}
ctime → stringclick to toggle source

Returns a canonical string representation oftime.

Time.now.asctime#=> "Wed Apr  9 08:56:03 2003"Time.now.ctime#=> "Wed Apr  9 08:56:03 2003"
                static VALUEtime_asctime(VALUE time){    return strftimev("%a %b %e %T %Y", time, rb_usascii_encoding());}
day → integerclick to toggle source

Returns the day of the month (1..31) fortime.

t =Time.now#=> 2007-11-19 08:27:03 -0600t.day#=> 19t.mday#=> 19
                static VALUEtime_mday(VALUE time){    struct time_object *tobj;    GetTimeval(time, tobj);    MAKE_TM(time, tobj);    return INT2FIX(tobj->vtm.mday);}
dst? → true or falseclick to toggle source

Returnstrue iftime occurs during Daylight SavingTime in its time zone.

# CST6CDT:Time.local(2000,1,1).zone#=> "CST"Time.local(2000,1,1).isdst#=> falseTime.local(2000,1,1).dst?#=> falseTime.local(2000,7,1).zone#=> "CDT"Time.local(2000,7,1).isdst#=> trueTime.local(2000,7,1).dst?#=> true# Asia/Tokyo:Time.local(2000,1,1).zone#=> "JST"Time.local(2000,1,1).isdst#=> falseTime.local(2000,1,1).dst?#=> falseTime.local(2000,7,1).zone#=> "JST"Time.local(2000,7,1).isdst#=> falseTime.local(2000,7,1).dst?#=> false
                static VALUEtime_isdst(VALUE time){    struct time_object *tobj;    GetTimeval(time, tobj);    MAKE_TM(time, tobj);    if (tobj->vtm.isdst == VTM_ISDST_INITVAL) {        rb_raise(rb_eRuntimeError, "isdst is not set yet");    }    return tobj->vtm.isdst ? Qtrue : Qfalse;}
eql?(other_time)click to toggle source

Returnstrue iftime andother_time arebothTime objects with the same seconds (includingsubsecond) from the Epoch.

                static VALUEtime_eql(VALUE time1, VALUE time2){    struct time_object *tobj1, *tobj2;    GetTimeval(time1, tobj1);    if (IsTimeval(time2)) {        GetTimeval(time2, tobj2);        return rb_equal(w2v(tobj1->timew), w2v(tobj2->timew));    }    return Qfalse;}
floor([ndigits]) → new_timeclick to toggle source

Floors subsecond to a given precision in decimal digits (0 digits bydefault). It returns a newTime object.ndigits should be zero or a positive integer.

t =Time.utc(2010,3,30,5,43,25.123456789r)t#=> 2010-03-30 05:43:25.123456789 UTCt.floor#=> 2010-03-30 05:43:25 UTCt.floor(0)#=> 2010-03-30 05:43:25 UTCt.floor(1)#=> 2010-03-30 05:43:25.1 UTCt.floor(2)#=> 2010-03-30 05:43:25.12 UTCt.floor(3)#=> 2010-03-30 05:43:25.123 UTCt.floor(4)#=> 2010-03-30 05:43:25.1234 UTCt =Time.utc(1999,12,31,23,59,59)(t+0.4).floor#=> 1999-12-31 23:59:59 UTC(t+0.9).floor#=> 1999-12-31 23:59:59 UTC(t+1.4).floor#=> 2000-01-01 00:00:00 UTC(t+1.9).floor#=> 2000-01-01 00:00:00 UTCt =Time.utc(1999,12,31,23,59,59)(t+0.123456789).floor(4)#=> 1999-12-31 23:59:59.1234 UTC
                static VALUEtime_floor(int argc, VALUE *argv, VALUE time){    VALUE ndigits, v, den;    struct time_object *tobj;    if (!rb_check_arity(argc, 0, 1) || NIL_P(ndigits = argv[0]))        den = INT2FIX(1);    else        den = ndigits_denominator(ndigits);    GetTimeval(time, tobj);    v = w2v(rb_time_unmagnify(tobj->timew));    v = modv(v, den);    return time_add(tobj, time, v, -1);}
friday? → true or falseclick to toggle source

Returnstrue iftime represents Friday.

t =Time.local(1987,12,18)#=> 1987-12-18 00:00:00 -0600t.friday?#=> true
                static VALUEtime_friday(VALUE time){    wday_p(5);}
getgm → new_timeclick to toggle source

Returns a newTime object representingtime in UTC.

t =Time.local(2000,1,1,20,15,1)#=> 2000-01-01 20:15:01 -0600t.gmt?#=> falsey =t.getgm#=> 2000-01-02 02:15:01 UTCy.gmt?#=> truet==y#=> true
                static VALUEtime_getgmtime(VALUE time){    return time_gmtime(time_dup(time));}
getlocal → new_timeclick to toggle source
getlocal(utc_offset) → new_time
getlocal(timezone) → new_time

Returns a newTime object representingtime in local time (using the local time zone in effect for thisprocess).

Ifutc_offset is given, it is used instead of the local time.utc_offset can be given as a human-readable string (eg."+09:00") or as a number of seconds (eg.32400).

t =Time.utc(2000,1,1,20,15,1)#=> 2000-01-01 20:15:01 UTCt.utc?#=> truel =t.getlocal#=> 2000-01-01 14:15:01 -0600l.utc?#=> falset==l#=> truej =t.getlocal("+09:00")#=> 2000-01-02 05:15:01 +0900j.utc?#=> falset==j#=> truek =t.getlocal(9*60*60)#=> 2000-01-02 05:15:01 +0900k.utc?#=> falset==k#=> true
                static VALUEtime_getlocaltime(int argc, VALUE *argv, VALUE time){    VALUE off;    if (rb_check_arity(argc, 0, 1) && !NIL_P(off = argv[0])) {        VALUE zone = off;        if (maybe_tzobj_p(zone)) {            VALUE t = time_dup(time);            if (zone_localtime(off, t)) return t;        }        if (NIL_P(off = utc_offset_arg(off))) {            if (NIL_P(zone = find_timezone(time, zone))) invalid_utc_offset();            time = time_dup(time);            if (!zone_localtime(zone, time)) invalid_utc_offset();            return time;        }        else if (off == UTC_ZONE) {            return time_gmtime(time_dup(time));        }        validate_utc_offset(off);        time = time_dup(time);        time_set_utc_offset(time, off);        return time_fixoff(time);    }    return time_localtime(time_dup(time));}
getutc → new_timeclick to toggle source

Returns a newTime object representingtime in UTC.

t =Time.local(2000,1,1,20,15,1)#=> 2000-01-01 20:15:01 -0600t.gmt?#=> falsey =t.getgm#=> 2000-01-02 02:15:01 UTCy.gmt?#=> truet==y#=> true
                static VALUEtime_getgmtime(VALUE time){    return time_gmtime(time_dup(time));}
gmt? → true or falseclick to toggle source

Returnstrue iftime represents a time in UTC (GMT).

t =Time.now#=> 2007-11-19 08:15:23 -0600t.utc?#=> falset =Time.gm(2000,"jan",1,20,15,1)#=> 2000-01-01 20:15:01 UTCt.utc?#=> truet =Time.now#=> 2007-11-19 08:16:03 -0600t.gmt?#=> falset =Time.gm(2000,1,1,20,15,1)#=> 2000-01-01 20:15:01 UTCt.gmt?#=> true
                static VALUEtime_utc_p(VALUE time){    struct time_object *tobj;    GetTimeval(time, tobj);    if (TZMODE_UTC_P(tobj)) return Qtrue;    return Qfalse;}
gmt_offset → integerclick to toggle source

Returns the offset in seconds between the timezone oftime andUTC.

t =Time.gm(2000,1,1,20,15,1)#=> 2000-01-01 20:15:01 UTCt.gmt_offset#=> 0l =t.getlocal#=> 2000-01-01 14:15:01 -0600l.gmt_offset#=> -21600
                VALUErb_time_utc_offset(VALUE time){    struct time_object *tobj;    GetTimeval(time, tobj);    if (TZMODE_UTC_P(tobj)) {        return INT2FIX(0);    }    else {        MAKE_TM(time, tobj);        return tobj->vtm.utc_offset;    }}
gmtime → timeclick to toggle source

Convertstime to UTC (GMT), modifying the receiver.

t =Time.now#=> 2007-11-19 08:18:31 -0600t.gmt?#=> falset.gmtime#=> 2007-11-19 14:18:31 UTCt.gmt?#=> truet =Time.now#=> 2007-11-19 08:18:51 -0600t.utc?#=> falset.utc#=> 2007-11-19 14:18:51 UTCt.utc?#=> true
                static VALUEtime_gmtime(VALUE time){    struct time_object *tobj;    struct vtm vtm;    GetTimeval(time, tobj);    if (TZMODE_UTC_P(tobj)) {        if (tobj->tm_got)            return time;    }    else {        time_modify(time);    }    vtm.zone = str_utc;    GMTIMEW(tobj->timew, &vtm);    tobj->vtm = vtm;    tobj->tm_got = 1;    TZMODE_SET_UTC(tobj);    return time;}
gmtoff → integerclick to toggle source

Returns the offset in seconds between the timezone oftime andUTC.

t =Time.gm(2000,1,1,20,15,1)#=> 2000-01-01 20:15:01 UTCt.gmt_offset#=> 0l =t.getlocal#=> 2000-01-01 14:15:01 -0600l.gmt_offset#=> -21600
                VALUErb_time_utc_offset(VALUE time){    struct time_object *tobj;    GetTimeval(time, tobj);    if (TZMODE_UTC_P(tobj)) {        return INT2FIX(0);    }    else {        MAKE_TM(time, tobj);        return tobj->vtm.utc_offset;    }}
hash → integerclick to toggle source

Returns a hash code for thisTime object.

See alsoObject#hash.

                static VALUEtime_hash(VALUE time){    struct time_object *tobj;    GetTimeval(time, tobj);    return rb_hash(w2v(tobj->timew));}
hour → integerclick to toggle source

Returns the hour of the day (0..23) fortime.

t =Time.now#=> 2007-11-19 08:26:20 -0600t.hour#=> 8
                static VALUEtime_hour(VALUE time){    struct time_object *tobj;    GetTimeval(time, tobj);    MAKE_TM(time, tobj);    return INT2FIX(tobj->vtm.hour);}
inspect → stringclick to toggle source

Returns a detailed string representingtime. Unlike#to_s, preserves subsecond in therepresentation for easier debugging.

t =Time.nowt.inspect#=> "2012-11-10 18:16:12.261257655 +0100"t.strftime"%Y-%m-%d %H:%M:%S.%N %z"#=> "2012-11-10 18:16:12.261257655 +0100"t.utc.inspect#=> "2012-11-10 17:16:12.261257655 UTC"t.strftime"%Y-%m-%d %H:%M:%S.%N UTC"#=> "2012-11-10 17:16:12.261257655 UTC"
                static VALUEtime_inspect(VALUE time){    struct time_object *tobj;    VALUE str, subsec;    GetTimeval(time, tobj);    str = strftimev("%Y-%m-%d %H:%M:%S", time, rb_usascii_encoding());    subsec = w2v(wmod(tobj->timew, WINT2FIXWV(TIME_SCALE)));    if (FIXNUM_P(subsec) && FIX2LONG(subsec) == 0) {    }    else if (FIXNUM_P(subsec) && FIX2LONG(subsec) < TIME_SCALE) {        long len;        rb_str_catf(str, ".%09ld", FIX2LONG(subsec));        for (len=RSTRING_LEN(str); RSTRING_PTR(str)[len-1] == '0' && len > 0; len--)            ;        rb_str_resize(str, len);    }    else {        rb_str_cat_cstr(str, " ");        subsec = quov(subsec, INT2FIX(TIME_SCALE));        rb_str_concat(str, rb_obj_as_string(subsec));    }    if (TZMODE_UTC_P(tobj)) {        rb_str_cat_cstr(str, " UTC");    }    else {        rb_str_concat(str, strftimev(" %z", time, rb_usascii_encoding()));    }    return str;}
isdst → true or falseclick to toggle source

Returnstrue iftime occurs during Daylight SavingTime in its time zone.

# CST6CDT:Time.local(2000,1,1).zone#=> "CST"Time.local(2000,1,1).isdst#=> falseTime.local(2000,1,1).dst?#=> falseTime.local(2000,7,1).zone#=> "CDT"Time.local(2000,7,1).isdst#=> trueTime.local(2000,7,1).dst?#=> true# Asia/Tokyo:Time.local(2000,1,1).zone#=> "JST"Time.local(2000,1,1).isdst#=> falseTime.local(2000,1,1).dst?#=> falseTime.local(2000,7,1).zone#=> "JST"Time.local(2000,7,1).isdst#=> falseTime.local(2000,7,1).dst?#=> false
                static VALUEtime_isdst(VALUE time){    struct time_object *tobj;    GetTimeval(time, tobj);    MAKE_TM(time, tobj);    if (tobj->vtm.isdst == VTM_ISDST_INITVAL) {        rb_raise(rb_eRuntimeError, "isdst is not set yet");    }    return tobj->vtm.isdst ? Qtrue : Qfalse;}
localtime → timeclick to toggle source
localtime(utc_offset) → time

Convertstime to local time (using the local time zone in effectat the creation time oftime) modifying the receiver.

Ifutc_offset is given, it is used instead of the local time.

t =Time.utc(2000,"jan",1,20,15,1)#=> 2000-01-01 20:15:01 UTCt.utc?#=> truet.localtime#=> 2000-01-01 14:15:01 -0600t.utc?#=> falset.localtime("+09:00")#=> 2000-01-02 05:15:01 +0900t.utc?#=> false

Ifutc_offset is not given andtime is local time,just returns the receiver.

                static VALUEtime_localtime_m(int argc, VALUE *argv, VALUE time){    VALUE off;    if (rb_check_arity(argc, 0, 1) && !NIL_P(off = argv[0])) {        return time_zonelocal(time, off);    }    return time_localtime(time);}
mday → integerclick to toggle source

Returns the day of the month (1..31) fortime.

t =Time.now#=> 2007-11-19 08:27:03 -0600t.day#=> 19t.mday#=> 19
                static VALUEtime_mday(VALUE time){    struct time_object *tobj;    GetTimeval(time, tobj);    MAKE_TM(time, tobj);    return INT2FIX(tobj->vtm.mday);}
min → integerclick to toggle source

Returns the minute of the hour (0..59) fortime.

t =Time.now#=> 2007-11-19 08:25:51 -0600t.min#=> 25
                static VALUEtime_min(VALUE time){    struct time_object *tobj;    GetTimeval(time, tobj);    MAKE_TM(time, tobj);    return INT2FIX(tobj->vtm.min);}
mon → integerclick to toggle source
month → integer

Returns the month of the year (1..12) fortime.

t =Time.now#=> 2007-11-19 08:27:30 -0600t.mon#=> 11t.month#=> 11
                static VALUEtime_mon(VALUE time){    struct time_object *tobj;    GetTimeval(time, tobj);    MAKE_TM(time, tobj);    return INT2FIX(tobj->vtm.mon);}
monday? → true or falseclick to toggle source

Returnstrue iftime represents Monday.

t =Time.local(2003,8,4)#=> 2003-08-04 00:00:00 -0500t.monday?#=> true
                static VALUEtime_monday(VALUE time){    wday_p(1);}
month → integerclick to toggle source

Returns the month of the year (1..12) fortime.

t =Time.now#=> 2007-11-19 08:27:30 -0600t.mon#=> 11t.month#=> 11
                static VALUEtime_mon(VALUE time){    struct time_object *tobj;    GetTimeval(time, tobj);    MAKE_TM(time, tobj);    return INT2FIX(tobj->vtm.mon);}
nsec → intclick to toggle source

Returns the number of nanoseconds for the subsecond part oftime.The result is a non-negative integer less than 10**9.

t =Time.now#=> 2020-07-20 22:07:10.963933942 +0900t.nsec#=> 963933942

Iftime has fraction of nanosecond (such as picoseconds), it istruncated.

t =Time.new(2000,1,1,0,0,0.666_777_888_999r)t.nsec#=> 666777888

#subsec can be used to obtain thesubsecond part exactly.

                static VALUEtime_nsec(VALUE time){    struct time_object *tobj;    GetTimeval(time, tobj);    return rb_to_int(w2v(wmulquoll(wmod(tobj->timew, WINT2WV(TIME_SCALE)), 1000000000, TIME_SCALE)));}
round([ndigits]) → new_timeclick to toggle source

Rounds subsecond to a given precision in decimal digits (0 digits bydefault). It returns a newTime object.ndigits should be zero or a positive integer.

t =Time.utc(2010,3,30,5,43,25.123456789r)t#=> 2010-03-30 05:43:25.123456789 UTCt.round#=> 2010-03-30 05:43:25 UTCt.round(0)#=> 2010-03-30 05:43:25 UTCt.round(1)#=> 2010-03-30 05:43:25.1 UTCt.round(2)#=> 2010-03-30 05:43:25.12 UTCt.round(3)#=> 2010-03-30 05:43:25.123 UTCt.round(4)#=> 2010-03-30 05:43:25.1235 UTCt =Time.utc(1999,12,31,23,59,59)(t+0.4).round#=> 1999-12-31 23:59:59 UTC(t+0.49).round#=> 1999-12-31 23:59:59 UTC(t+0.5).round#=> 2000-01-01 00:00:00 UTC(t+1.4).round#=> 2000-01-01 00:00:00 UTC(t+1.49).round#=> 2000-01-01 00:00:00 UTC(t+1.5).round#=> 2000-01-01 00:00:01 UTCt =Time.utc(1999,12,31,23,59,59)#=> 1999-12-31 23:59:59 UTC(t+0.123456789).round(4).iso8601(6)#=> 1999-12-31 23:59:59.1235 UTC
                static VALUEtime_round(int argc, VALUE *argv, VALUE time){    VALUE ndigits, v, den;    struct time_object *tobj;    if (!rb_check_arity(argc, 0, 1) || NIL_P(ndigits = argv[0]))        den = INT2FIX(1);    else        den = ndigits_denominator(ndigits);    GetTimeval(time, tobj);    v = w2v(rb_time_unmagnify(tobj->timew));    v = modv(v, den);    if (lt(v, quov(den, INT2FIX(2))))        return time_add(tobj, time, v, -1);    else        return time_add(tobj, time, subv(den, v), 1);}
saturday? → true or falseclick to toggle source

Returnstrue iftime represents Saturday.

t =Time.local(2006,6,10)#=> 2006-06-10 00:00:00 -0500t.saturday?#=> true
                static VALUEtime_saturday(VALUE time){    wday_p(6);}
sec → integerclick to toggle source

Returns the second of the minute (0..60) fortime.

Note: Seconds range from zero to 60 to allow the system toinject leap seconds. Seeen.wikipedia.org/wiki/Leap_secondfor further details.

t =Time.now#=> 2007-11-19 08:25:02 -0600t.sec#=> 2
                static VALUEtime_sec(VALUE time){    struct time_object *tobj;    GetTimeval(time, tobj);    MAKE_TM(time, tobj);    return INT2FIX(tobj->vtm.sec);}
strftime( string ) → stringclick to toggle source

Formatstime according to the directives in the given formatstring.

The directives begin with a percent (%) character. Any text not listed as adirective will be passed through to the output string.

The directive consists of a percent (%) character, zero or more flags,optional minimum field width, optional modifier and a conversion specifieras follows:

%<flags><width><modifier><conversion>

Flags:

-  don't pad a numerical output_  use spaces for padding0  use zeros for padding^  upcase the result string#  change case:  use colons for %z

The minimum field width specifies the minimum width.

The modifiers are “E” and “O”. They are ignored.

Format directives:

Date (Year, Month, Day):  %Y - Year with century if provided, will pad result at least 4 digits.          -0001, 0000, 1995, 2009, 14292, etc.  %C - year / 100 (rounded down such as 20 in 2009)  %y - year % 100 (00..99)  %m - Month of the year, zero-padded (01..12)          %_m  blank-padded ( 1..12)          %-m  no-padded (1..12)  %B - The full month name (``January'')          %^B  uppercased (``JANUARY'')  %b - The abbreviated month name (``Jan'')          %^b  uppercased (``JAN'')  %h - Equivalent to %b  %d - Day of the month, zero-padded (01..31)          %-d  no-padded (1..31)  %e - Day of the month, blank-padded ( 1..31)  %j - Day of the year (001..366)Time (Hour, Minute, Second, Subsecond):  %H - Hour of the day, 24-hour clock, zero-padded (00..23)  %k - Hour of the day, 24-hour clock, blank-padded ( 0..23)  %I - Hour of the day, 12-hour clock, zero-padded (01..12)  %l - Hour of the day, 12-hour clock, blank-padded ( 1..12)  %P - Meridian indicator, lowercase (``am'' or ``pm'')  %p - Meridian indicator, uppercase (``AM'' or ``PM'')  %M - Minute of the hour (00..59)  %S - Second of the minute (00..60)  %L - Millisecond of the second (000..999)       The digits under millisecond are truncated to not produce 1000.  %N - Fractional seconds digits, default is 9 digits (nanosecond)          %3N  millisecond (3 digits)          %6N  microsecond (6 digits)          %9N  nanosecond (9 digits)          %12N picosecond (12 digits)          %15N femtosecond (15 digits)          %18N attosecond (18 digits)          %21N zeptosecond (21 digits)          %24N yoctosecond (24 digits)       The digits under the specified length are truncated to avoid       carry up.Time zone:  %z - Time zone as hour and minute offset from UTC (e.g. +0900)          %:z - hour and minute offset from UTC with a colon (e.g. +09:00)          %::z - hour, minute and second offset from UTC (e.g. +09:00:00)  %Z - Abbreviated time zone name or similar information.  (OS dependent)Weekday:  %A - The full weekday name (``Sunday'')          %^A  uppercased (``SUNDAY'')  %a - The abbreviated name (``Sun'')          %^a  uppercased (``SUN'')  %u - Day of the week (Monday is 1, 1..7)  %w - Day of the week (Sunday is 0, 0..6)ISO 8601 week-based year and week number:The first week of YYYY starts with a Monday and includes YYYY-01-04.The days in the year before the first week are in the last week ofthe previous year.  %G - The week-based year  %g - The last 2 digits of the week-based year (00..99)  %V - Week number of the week-based year (01..53)Week number:The first week of YYYY that starts with a Sunday or Monday (according to %Uor %W). The days in the year before the first week are in week 0.  %U - Week number of the year. The week starts with Sunday. (00..53)  %W - Week number of the year. The week starts with Monday. (00..53)Seconds since the Epoch:  %s - Number of seconds since 1970-01-01 00:00:00 UTC.Literal string:  %n - Newline character (\n)  %t - Tab character (\t)  %% - Literal ``%'' characterCombination:  %c - date and time (%a %b %e %T %Y)  %D - Date (%m/%d/%y)  %F - The ISO 8601 date format (%Y-%m-%d)  %v - VMS date (%e-%^b-%4Y)  %x - Same as %D  %X - Same as %T  %r - 12-hour time (%I:%M:%S %p)  %R - 24-hour time (%H:%M)  %T - 24-hour time (%H:%M:%S)

This method is similar to strftime() function defined in ISO C and POSIX.

While all directives are locale independent since Ruby 1.9, %Z is platformdependent. So, the result may differ even if the same format string is usedin other systems such as C.

%z is recommended over %Z. %Z doesn't identify the timezone. Forexample, “CST” is used at America/Chicago (-06:00), America/Havana(-05:00), Asia/Harbin (+08:00), Australia/Darwin (+09:30) andAustralia/Adelaide (+10:30). Also, %Z is highly dependent on the operatingsystem. For example, it may generate a non ASCII string on JapaneseWindows, i.e. the result can be different to “JST”. So the numeric timezone offset, %z, is recommended.

Examples:

t =Time.new(2007,11,19,8,37,48,"-06:00")#=> 2007-11-19 08:37:48 -0600t.strftime("Printed on %m/%d/%Y")#=> "Printed on 11/19/2007"t.strftime("at %I:%M %p")#=> "at 08:37 AM"

Various ISO 8601 formats:

%Y%m%d           => 20071119                  Calendar date (basic)%F               => 2007-11-19                Calendar date (extended)%Y-%m            => 2007-11                   Calendar date, reduced accuracy, specific month%Y               => 2007                      Calendar date, reduced accuracy, specific year%C               => 20                        Calendar date, reduced accuracy, specific century%Y%j             => 2007323                   Ordinal date (basic)%Y-%j            => 2007-323                  Ordinal date (extended)%GW%V%u          => 2007W471                  Week date (basic)%G-W%V-%u        => 2007-W47-1                Week date (extended)%GW%V            => 2007W47                   Week date, reduced accuracy, specific week (basic)%G-W%V           => 2007-W47                  Week date, reduced accuracy, specific week (extended)%H%M%S           => 083748                    Local time (basic)%T               => 08:37:48                  Local time (extended)%H%M             => 0837                      Local time, reduced accuracy, specific minute (basic)%H:%M            => 08:37                     Local time, reduced accuracy, specific minute (extended)%H               => 08                        Local time, reduced accuracy, specific hour%H%M%S,%L        => 083748,000                Local time with decimal fraction, comma as decimal sign (basic)%T,%L            => 08:37:48,000              Local time with decimal fraction, comma as decimal sign (extended)%H%M%S.%L        => 083748.000                Local time with decimal fraction, full stop as decimal sign (basic)%T.%L            => 08:37:48.000              Local time with decimal fraction, full stop as decimal sign (extended)%H%M%S%z         => 083748-0600               Local time and the difference from UTC (basic)%T%:z            => 08:37:48-06:00            Local time and the difference from UTC (extended)%Y%m%dT%H%M%S%z  => 20071119T083748-0600      Date and time of day for calendar date (basic)%FT%T%:z         => 2007-11-19T08:37:48-06:00 Date and time of day for calendar date (extended)%Y%jT%H%M%S%z    => 2007323T083748-0600       Date and time of day for ordinal date (basic)%Y-%jT%T%:z      => 2007-323T08:37:48-06:00   Date and time of day for ordinal date (extended)%GW%V%uT%H%M%S%z => 2007W471T083748-0600      Date and time of day for week date (basic)%G-W%V-%uT%T%:z  => 2007-W47-1T08:37:48-06:00 Date and time of day for week date (extended)%Y%m%dT%H%M      => 20071119T0837             Calendar date and local time (basic)%FT%R            => 2007-11-19T08:37          Calendar date and local time (extended)%Y%jT%H%MZ       => 2007323T0837Z             Ordinal date and UTC of day (basic)%Y-%jT%RZ        => 2007-323T08:37Z           Ordinal date and UTC of day (extended)%GW%V%uT%H%M%z   => 2007W471T0837-0600        Week date and local time and difference from UTC (basic)%G-W%V-%uT%R%:z  => 2007-W47-1T08:37-06:00    Week date and local time and difference from UTC (extended)
                static VALUEtime_strftime(VALUE time, VALUE format){    struct time_object *tobj;    const char *fmt;    long len;    rb_encoding *enc;    VALUE tmp;    GetTimeval(time, tobj);    MAKE_TM_ENSURE(time, tobj, tobj->vtm.yday != 0);    StringValue(format);    if (!rb_enc_str_asciicompat_p(format)) {        rb_raise(rb_eArgError, "format should have ASCII compatible encoding");    }    tmp = rb_str_tmp_frozen_acquire(format);    fmt = RSTRING_PTR(tmp);    len = RSTRING_LEN(tmp);    enc = rb_enc_get(format);    if (len == 0) {        rb_warning("strftime called with empty format string");        return rb_enc_str_new(0, 0, enc);    }    else {        VALUE str = rb_strftime_alloc(fmt, len, enc, time, &tobj->vtm, tobj->timew,                                      TZMODE_UTC_P(tobj));        rb_str_tmp_frozen_release(format, tmp);        if (!str) rb_raise(rb_eArgError, "invalid format: %"PRIsVALUE, format);        return str;    }}
subsec → numberclick to toggle source

Returns the subsecond fortime.

The return value can be a rational number.

t =Time.now#=> 2020-07-20 15:40:26.867462289 +0900t.subsec#=> (867462289/1000000000)t =Time.now#=> 2020-07-20 15:40:50.313828595 +0900t.subsec#=> (62765719/200000000)t =Time.new(2000,1,1,2,3,4)#=> 2000-01-01 02:03:04 +0900t.subsec#=> 0Time.new(2000,1,1,0,0,1/3r,"UTC").subsec#=> (1/3)
                static VALUEtime_subsec(VALUE time){    struct time_object *tobj;    GetTimeval(time, tobj);    return quov(w2v(wmod(tobj->timew, WINT2FIXWV(TIME_SCALE))), INT2FIX(TIME_SCALE));}
sunday? → true or falseclick to toggle source

Returnstrue iftime represents Sunday.

t =Time.local(1990,4,1)#=> 1990-04-01 00:00:00 -0600t.sunday?#=> true
                static VALUEtime_sunday(VALUE time){    wday_p(0);}
thursday? → true or falseclick to toggle source

Returnstrue iftime represents Thursday.

t =Time.local(1995,12,21)#=> 1995-12-21 00:00:00 -0600t.thursday?#=> true
                static VALUEtime_thursday(VALUE time){    wday_p(4);}
to_a → arrayclick to toggle source

Returns a ten-elementarray of values fortime:

[sec,min,hour,day,month,year,wday,yday,isdst,zone]

See the individual methods for an explanation of the valid ranges of eachvalue. The ten elements can be passed directly to::utc or::local to create a newTime object.

t =Time.now#=> 2007-11-19 08:36:01 -0600now =t.to_a#=> [1, 36, 8, 19, 11, 2007, 1, 323, false, "CST"]
                static VALUEtime_to_a(VALUE time){    struct time_object *tobj;    GetTimeval(time, tobj);    MAKE_TM_ENSURE(time, tobj, tobj->vtm.yday != 0);    return rb_ary_new3(10,                    INT2FIX(tobj->vtm.sec),                    INT2FIX(tobj->vtm.min),                    INT2FIX(tobj->vtm.hour),                    INT2FIX(tobj->vtm.mday),                    INT2FIX(tobj->vtm.mon),                    tobj->vtm.year,                    INT2FIX(tobj->vtm.wday),                    INT2FIX(tobj->vtm.yday),                    tobj->vtm.isdst?Qtrue:Qfalse,                    time_zone(time));}
to_f → floatclick to toggle source

Returns the value oftime as a floating point number of secondssince the Epoch. The return value approximate the exact value in theTime object because floating point numbers cannotrepresent all rational numbers exactly.

t =Time.now#=> 2020-07-20 22:00:29.38740268 +0900t.to_f#=> 1595250029.3874028t.to_i#=> 1595250029

Note that IEEE 754 double is not accurate enough to represent the exactnumber of nanoseconds since the Epoch. (IEEE 754 double has 53bit mantissa.So it can represent exact number of nanoseconds only in `2 ** 53 /1_000_000_000 / 60 / 60 / 24 = 104.2` days.) When Ruby uses ananosecond-resolution clock function, such asclock_gettime ofPOSIX, to obtain the current time,#to_f can lost information of aTime object created withTime.now.

                static VALUEtime_to_f(VALUE time){    struct time_object *tobj;    GetTimeval(time, tobj);    return rb_Float(rb_time_unmagnify_to_float(tobj->timew));}
to_i → intclick to toggle source

Returns the value oftime as an integer number of seconds sincethe Epoch.

Iftime contains subsecond, they are truncated.

t =Time.now#=> 2020-07-21 01:41:29.746012609 +0900t.to_i#=> 1595263289
                static VALUEtime_to_i(VALUE time){    struct time_object *tobj;    GetTimeval(time, tobj);    return w2v(wdiv(tobj->timew, WINT2FIXWV(TIME_SCALE)));}
to_r → a_rationalclick to toggle source

Returns the value oftime as a rational number of seconds sincethe Epoch.

t =Time.now#=> 2020-07-20 22:03:45.212167333 +0900t.to_r#=> (1595250225212167333/1000000000)

This method is intended to be used to get an accurate value representingthe seconds (including subsecond) since the Epoch.

                static VALUEtime_to_r(VALUE time){    struct time_object *tobj;    VALUE v;    GetTimeval(time, tobj);    v = rb_time_unmagnify_to_rational(tobj->timew);    if (!RB_TYPE_P(v, T_RATIONAL)) {        v = rb_Rational1(v);    }    return v;}
to_s → stringclick to toggle source

Returns a string representingtime. Equivalent to callingstrftime with the appropriate formatstring.

t =Time.nowt.to_s#=> "2012-11-10 18:16:12 +0100"t.strftime"%Y-%m-%d %H:%M:%S %z"#=> "2012-11-10 18:16:12 +0100"t.utc.to_s#=> "2012-11-10 17:16:12 UTC"t.strftime"%Y-%m-%d %H:%M:%S UTC"#=> "2012-11-10 17:16:12 UTC"
                static VALUEtime_to_s(VALUE time){    struct time_object *tobj;    GetTimeval(time, tobj);    if (TZMODE_UTC_P(tobj))        return strftimev("%Y-%m-%d %H:%M:%S UTC", time, rb_usascii_encoding());    else        return strftimev("%Y-%m-%d %H:%M:%S %z", time, rb_usascii_encoding());}
tuesday? → true or falseclick to toggle source

Returnstrue iftime represents Tuesday.

t =Time.local(1991,2,19)#=> 1991-02-19 00:00:00 -0600t.tuesday?#=> true
                static VALUEtime_tuesday(VALUE time){    wday_p(2);}
tv_nsec → intclick to toggle source

Returns the number of nanoseconds for the subsecond part oftime.The result is a non-negative integer less than 10**9.

t =Time.now#=> 2020-07-20 22:07:10.963933942 +0900t.nsec#=> 963933942

Iftime has fraction of nanosecond (such as picoseconds), it istruncated.

t =Time.new(2000,1,1,0,0,0.666_777_888_999r)t.nsec#=> 666777888

#subsec can be used to obtain thesubsecond part exactly.

                static VALUEtime_nsec(VALUE time){    struct time_object *tobj;    GetTimeval(time, tobj);    return rb_to_int(w2v(wmulquoll(wmod(tobj->timew, WINT2WV(TIME_SCALE)), 1000000000, TIME_SCALE)));}
tv_sec → intclick to toggle source

Returns the value oftime as an integer number of seconds sincethe Epoch.

Iftime contains subsecond, they are truncated.

t =Time.now#=> 2020-07-21 01:41:29.746012609 +0900t.to_i#=> 1595263289
                static VALUEtime_to_i(VALUE time){    struct time_object *tobj;    GetTimeval(time, tobj);    return w2v(wdiv(tobj->timew, WINT2FIXWV(TIME_SCALE)));}
tv_usec → intclick to toggle source

Returns the number of microseconds for the subsecond part oftime.The result is a non-negative integer less than 10**6.

t =Time.now#=> 2020-07-20 22:05:58.459785953 +0900t.usec#=> 459785

Iftime has fraction of microsecond (such as nanoseconds), it istruncated.

t =Time.new(2000,1,1,0,0,0.666_777_888_999r)t.usec#=> 666777

#subsec can be used to obtain thesubsecond part exactly.

                static VALUEtime_usec(VALUE time){    struct time_object *tobj;    wideval_t w, q, r;    GetTimeval(time, tobj);    w = wmod(tobj->timew, WINT2WV(TIME_SCALE));    wmuldivmod(w, WINT2FIXWV(1000000), WINT2FIXWV(TIME_SCALE), &q, &r);    return rb_to_int(w2v(q));}
usec → intclick to toggle source

Returns the number of microseconds for the subsecond part oftime.The result is a non-negative integer less than 10**6.

t =Time.now#=> 2020-07-20 22:05:58.459785953 +0900t.usec#=> 459785

Iftime has fraction of microsecond (such as nanoseconds), it istruncated.

t =Time.new(2000,1,1,0,0,0.666_777_888_999r)t.usec#=> 666777

#subsec can be used to obtain thesubsecond part exactly.

                static VALUEtime_usec(VALUE time){    struct time_object *tobj;    wideval_t w, q, r;    GetTimeval(time, tobj);    w = wmod(tobj->timew, WINT2WV(TIME_SCALE));    wmuldivmod(w, WINT2FIXWV(1000000), WINT2FIXWV(TIME_SCALE), &q, &r);    return rb_to_int(w2v(q));}
gmtime → timeclick to toggle source
utc → time

Convertstime to UTC (GMT), modifying the receiver.

t =Time.now#=> 2007-11-19 08:18:31 -0600t.gmt?#=> falset.gmtime#=> 2007-11-19 14:18:31 UTCt.gmt?#=> truet =Time.now#=> 2007-11-19 08:18:51 -0600t.utc?#=> falset.utc#=> 2007-11-19 14:18:51 UTCt.utc?#=> true
                static VALUEtime_gmtime(VALUE time){    struct time_object *tobj;    struct vtm vtm;    GetTimeval(time, tobj);    if (TZMODE_UTC_P(tobj)) {        if (tobj->tm_got)            return time;    }    else {        time_modify(time);    }    vtm.zone = str_utc;    GMTIMEW(tobj->timew, &vtm);    tobj->vtm = vtm;    tobj->tm_got = 1;    TZMODE_SET_UTC(tobj);    return time;}
utc? → true or falseclick to toggle source

Returnstrue iftime represents a time in UTC (GMT).

t =Time.now#=> 2007-11-19 08:15:23 -0600t.utc?#=> falset =Time.gm(2000,"jan",1,20,15,1)#=> 2000-01-01 20:15:01 UTCt.utc?#=> truet =Time.now#=> 2007-11-19 08:16:03 -0600t.gmt?#=> falset =Time.gm(2000,1,1,20,15,1)#=> 2000-01-01 20:15:01 UTCt.gmt?#=> true
                static VALUEtime_utc_p(VALUE time){    struct time_object *tobj;    GetTimeval(time, tobj);    if (TZMODE_UTC_P(tobj)) return Qtrue;    return Qfalse;}
utc_offset → integerclick to toggle source

Returns the offset in seconds between the timezone oftime andUTC.

t =Time.gm(2000,1,1,20,15,1)#=> 2000-01-01 20:15:01 UTCt.gmt_offset#=> 0l =t.getlocal#=> 2000-01-01 14:15:01 -0600l.gmt_offset#=> -21600
                VALUErb_time_utc_offset(VALUE time){    struct time_object *tobj;    GetTimeval(time, tobj);    if (TZMODE_UTC_P(tobj)) {        return INT2FIX(0);    }    else {        MAKE_TM(time, tobj);        return tobj->vtm.utc_offset;    }}
wday → integerclick to toggle source

Returns an integer representing the day of the week, 0..6, with Sunday ==0.

t =Time.now#=> 2007-11-20 02:35:35 -0600t.wday#=> 2t.sunday?#=> falset.monday?#=> falset.tuesday?#=> truet.wednesday?#=> falset.thursday?#=> falset.friday?#=> falset.saturday?#=> false
                static VALUEtime_wday(VALUE time){    struct time_object *tobj;    GetTimeval(time, tobj);    MAKE_TM_ENSURE(time, tobj, tobj->vtm.wday != VTM_WDAY_INITVAL);    return INT2FIX((int)tobj->vtm.wday);}
wednesday? → true or falseclick to toggle source

Returnstrue iftime represents Wednesday.

t =Time.local(1993,2,24)#=> 1993-02-24 00:00:00 -0600t.wednesday?#=> true
                static VALUEtime_wednesday(VALUE time){    wday_p(3);}
yday → integerclick to toggle source

Returns an integer representing the day of the year, 1..366.

t =Time.now#=> 2007-11-19 08:32:31 -0600t.yday#=> 323
                static VALUEtime_yday(VALUE time){    struct time_object *tobj;    GetTimeval(time, tobj);    MAKE_TM_ENSURE(time, tobj, tobj->vtm.yday != 0);    return INT2FIX(tobj->vtm.yday);}
year → integerclick to toggle source

Returns the year fortime (including the century).

t =Time.now#=> 2007-11-19 08:27:51 -0600t.year#=> 2007
                static VALUEtime_year(VALUE time){    struct time_object *tobj;    GetTimeval(time, tobj);    MAKE_TM(time, tobj);    return tobj->vtm.year;}
zone → string or timezoneclick to toggle source

Returns the name of the time zone used fortime. As of Ruby 1.8,returns “UTC'' rather than “GMT'' for UTC times.

t =Time.gm(2000,"jan",1,20,15,1)t.zone#=> "UTC"t =Time.local(2000,"jan",1,20,15,1)t.zone#=> "CST"
                static VALUEtime_zone(VALUE time){    struct time_object *tobj;    VALUE zone;    GetTimeval(time, tobj);    MAKE_TM(time, tobj);    if (TZMODE_UTC_P(tobj)) {        return rb_usascii_str_new_cstr("UTC");    }    zone = tobj->vtm.zone;    if (NIL_P(zone))        return Qnil;    if (RB_TYPE_P(zone, T_STRING))        zone = rb_str_dup(zone);    return zone;}

This page was generated for Ruby 3.0.0

Generated with Ruby-doc Rdoc Generator 0.42.0.


[8]ページ先頭

©2009-2025 Movatter.jp