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.
All of these examples were done using the EST timezone which is GMT-5.
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
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
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.
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.
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;}
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)));}
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)));}
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)));}
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);}
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;}
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)));}
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);}
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);}
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);}
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());}
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);}
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());}
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);}
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;}
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;}
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);}
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);}
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));}
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));}
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));}
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;}
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; }}
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;}
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; }}
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));}
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);}
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;}
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;}
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);}
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);}
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);}
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);}
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);}
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);}
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)));}
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);}
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);}
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);}
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; }}
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));}
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);}
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);}
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));}
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));}
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)));}
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;}
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());}
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);}
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)));}
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)));}
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));}
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));}
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;}
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;}
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; }}
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);}
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);}
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);}
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;}
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.