Class: Time
Class Method Summary collapse
-
.local(*args) ⇒ Object
Like Time.utc, except that the returned
Timeobject has the local timezone, not the UTC timezone:. -
.utc(*args) ⇒ Object
Returns a new
Timeobject based the on given arguments, in the UTC timezone.
Instance Method Summary collapse
-
#+(numeric) ⇒ Time
Returns a new
Timeobject whose value is the sum of the numeric value ofselfand the givennumeric:. -
#-(time2) ⇒ Object
When
numericis given, returns a newTimeobject whose value is the difference of the numeric value ofselfandnumeric:. -
#<=>(other_time) ⇒ -1, ...
Compares
selfwithother_time; returns:. -
#_dump(*args) ⇒ Object
private
:nodoc:.
-
#_load(str) ⇒ Object
private
:nodoc:.
-
#ctime ⇒ String
Returns a string representation of
self, formatted bystrftime('%a %b %e %T %Y')or its shorthand versionstrftime('%c'); see Formats for Dates and Times:. -
#ceil(ndigits = 0) ⇒ Time
Returns a new
Timeobject whose numerical value is greater than or equal toselfwith its seconds truncated to precisionndigits:. -
#ctime ⇒ String
Returns a string representation of
self, formatted bystrftime('%a %b %e %T %Y')or its shorthand versionstrftime('%c'); see Formats for Dates and Times:. -
#mday ⇒ Integer
Returns the integer day of the month for
self, in range (1..31):. -
#deconstruct_keys(array_of_names_or_nil) ⇒ Hash
Returns a hash of the name/value pairs, to use in pattern matching.
-
#dst? ⇒ Boolean
Returns
trueifselfis in daylight saving time,falseotherwise:. -
#eql?(other_time) ⇒ Boolean
Returns
trueifselfandother_timeare bothTimeobjects with the exact same time value. -
#floor(ndigits = 0) ⇒ Time
Returns a new
Timeobject whose numerical value is less than or equal toselfwith its seconds truncated to precisionndigits:. -
#friday? ⇒ Boolean
Returns
trueifselfrepresents a Friday,falseotherwise:. -
#getutc ⇒ Time
Returns a new
Timeobject representing the value ofselfconverted to the UTC timezone:. -
#getlocal(zone = nil) ⇒ Time
Returns a new
Timeobject representing the value ofselfconverted to a given timezone; ifzoneisnil, the local timezone is used:. -
#getutc ⇒ Time
Returns a new
Timeobject representing the value ofselfconverted to the UTC timezone:. -
#utc? ⇒ Boolean
Returns
trueifselfrepresents a time in UTC (GMT):. -
#utc_offset ⇒ Integer
Returns the offset in seconds between the timezones of UTC and
self:. -
#utc ⇒ self
Returns
self, converted to the UTC timezone:. -
#utc_offset ⇒ Integer
Returns the offset in seconds between the timezones of UTC and
self:. -
#hash ⇒ Integer
Returns the integer hash code for
self. -
#hour ⇒ Integer
Returns the integer hour of the day for
self, in range (0..23):. -
#initialize_copy(time) ⇒ Object
:nodoc:.
-
#inspect ⇒ String
Returns a string representation of
selfwith subseconds:. -
#dst? ⇒ Boolean
Returns
trueifselfis in daylight saving time,falseotherwise:. -
#localtime(*args) ⇒ Object
With no argument given:.
-
#mday ⇒ Integer
Returns the integer day of the month for
self, in range (1..31):. -
#min ⇒ Integer
Returns the integer minute of the hour for
self, in range (0..59):. -
#mon ⇒ Integer
Returns the integer month of the year for
self, in range (1..12):. -
#monday? ⇒ Boolean
Returns
trueifselfrepresents a Monday,falseotherwise:. -
#mon ⇒ Integer
Returns the integer month of the year for
self, in range (1..12):. -
#nsec ⇒ Integer
Returns the number of nanoseconds in the subseconds part of
selfin the range (0..999_999_999); lower-order digits are truncated, not rounded:. -
#round(ndigits = 0) ⇒ Time
Returns a new
Timeobject whose numeric value is that ofself, with its seconds value rounded to precisionndigits:. -
#saturday? ⇒ Boolean
Returns
trueifselfrepresents a Saturday,falseotherwise:. -
#sec ⇒ Integer
Returns the integer second of the minute for
self, in range (0..60):. -
#strftime(format_string) ⇒ String
Returns a string representation of
self, formatted according to the given stringformat. -
#subsec ⇒ Numeric
Returns the exact subseconds for
selfas a Numeric (Integer or Rational):. -
#sunday? ⇒ Boolean
Returns
trueifselfrepresents a Sunday,falseotherwise:. -
#thursday? ⇒ Boolean
Returns
trueifselfrepresents a Thursday,falseotherwise:. -
#to_a ⇒ Array
Returns a 10-element array of values representing
self:. -
#to_f ⇒ Float
Returns the value of
selfas a Float number Epoch seconds; subseconds are included. -
#to_i ⇒ Integer
Returns the value of
selfas integer Epoch seconds; subseconds are truncated (not rounded):. -
#to_r ⇒ Object
Returns the value of
selfas a Rational exact number of Epoch seconds;. -
#to_s ⇒ String
Returns a string representation of
self, without subseconds:. -
#tuesday? ⇒ Boolean
Returns
trueifselfrepresents a Tuesday,falseotherwise:. -
#nsec ⇒ Integer
Returns the number of nanoseconds in the subseconds part of
selfin the range (0..999_999_999); lower-order digits are truncated, not rounded:. -
#to_i ⇒ Integer
Returns the value of
selfas integer Epoch seconds; subseconds are truncated (not rounded):. -
#usec ⇒ Integer
Returns the number of microseconds in the subseconds part of
selfin the range (0..999_999); lower-order digits are truncated, not rounded:. -
#usec ⇒ Integer
Returns the number of microseconds in the subseconds part of
selfin the range (0..999_999); lower-order digits are truncated, not rounded:. -
#utc ⇒ self
(also: #gm)
Returns
self, converted to the UTC timezone:. -
#utc? ⇒ Boolean
Returns
trueifselfrepresents a time in UTC (GMT):. -
#utc_offset ⇒ Integer
Returns the offset in seconds between the timezones of UTC and
self:. -
#wday ⇒ Integer
Returns the integer day of the week for
self, in range (0..6), with Sunday as zero. -
#wednesday? ⇒ Boolean
Returns
trueifselfrepresents a Wednesday,falseotherwise:. -
#yday ⇒ Integer
Returns the integer day of the year of
self, in range (1..366). -
#year ⇒ Integer
Returns the integer year for
self:. -
#zone ⇒ String
Returns the string name of the time zone for
self:.
Methods included from Comparable
#<, #<=, #==, #>, #>=, #between?, #clamp
Class Method Details
.local(year, month = 1, mday = 1, hour = 0, min = 0, sec = 0, usec = 0) ⇒ Time .local(sec, min, hour, mday, month, year, dummy, dummy, dummy, dummy) ⇒ Time
3757 3758 3759 3760 3761 3762 3763 3764 |
# File 'time.c', line 3757
static VALUE
time_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)));
}
|
.utc(year, month = 1, mday = 1, hour = 0, min = 0, sec = 0, usec = 0) ⇒ Time .utc(sec, min, hour, mday, month, year, dummy, dummy, dummy, dummy) ⇒ Time
Returns a new Time object based the on given arguments, in the UTC timezone.
With one to seven arguments given, the arguments are interpreted as in the first calling sequence above:
Time.utc(year, month = 1, mday = 1, hour = 0, min = 0, sec = 0, usec = 0)
Examples:
Time.utc(2000) # => 2000-01-01 00:00:00 UTC
Time.utc(-2000) # => -2000-01-01 00:00:00 UTC
There are no minimum and maximum values for the required argument year.
For the optional arguments:
-
month: Month in range (1..12), or case-insensitive 3-letter month name:Time.utc(2000, 1) # => 2000-01-01 00:00:00 UTC Time.utc(2000, 12) # => 2000-12-01 00:00:00 UTC Time.utc(2000, 'jan') # => 2000-01-01 00:00:00 UTC Time.utc(2000, 'JAN') # => 2000-01-01 00:00:00 UTC -
mday: Month day in range(1..31):Time.utc(2000, 1, 1) # => 2000-01-01 00:00:00 UTC Time.utc(2000, 1, 31) # => 2000-01-31 00:00:00 UTC -
hour: Hour in range (0..23), or 24 ifmin,sec, andusecare zero:Time.utc(2000, 1, 1, 0) # => 2000-01-01 00:00:00 UTC Time.utc(2000, 1, 1, 23) # => 2000-01-01 23:00:00 UTC Time.utc(2000, 1, 1, 24) # => 2000-01-02 00:00:00 UTC -
min: Minute in range (0..59):Time.utc(2000, 1, 1, 0, 0) # => 2000-01-01 00:00:00 UTC Time.utc(2000, 1, 1, 0, 59) # => 2000-01-01 00:59:00 UTC -
sec: Second in range (0..59), or 60 ifusecis zero:Time.utc(2000, 1, 1, 0, 0, 0) # => 2000-01-01 00:00:00 UTC Time.utc(2000, 1, 1, 0, 0, 59) # => 2000-01-01 00:00:59 UTC Time.utc(2000, 1, 1, 0, 0, 60) # => 2000-01-01 00:01:00 UTC -
usec: Microsecond in range (0..999999):Time.utc(2000, 1, 1, 0, 0, 0, 0) # => 2000-01-01 00:00:00 UTC Time.utc(2000, 1, 1, 0, 0, 0, 999999) # => 2000-01-01 00:00:00.999999 UTC
The values may be:
-
Integers, as above.
-
Numerics convertible to integers:
Time.utc(Float(0.0), Rational(1, 1), 1.0, 0.0, 0.0, 0.0, 0.0) # => 0000-01-01 00:00:00 UTC -
String integers:
a = %w[0 1 1 0 0 0 0 0] # => ["0", "1", "1", "0", "0", "0", "0", "0"] Time.utc(*a) # => 0000-01-01 00:00:00 UTC
When exactly ten arguments are given, the arguments are interpreted as in the second calling sequence above:
Time.utc(sec, min, hour, mday, month, year, dummy, dummy, dummy, dummy)
where the dummy arguments are ignored:
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Time.utc(*a) # => 0005-04-03 02:01:00 UTC
This form is useful for creating a Time object from a 10-element array returned by Time.to_a:
t = Time.new(2000, 1, 2, 3, 4, 5, 6) # => 2000-01-02 03:04:05 +000006
a = t.to_a # => [5, 4, 3, 2, 1, 2000, 0, 2, false, nil]
Time.utc(*a) # => 2000-01-02 03:04:05 UTC
The two forms have their first six arguments in common, though in different orders; the ranges of these common arguments are the same for both forms; see above.
Raises an exception if the number of arguments is eight, nine, or greater than ten.
Related: Time.local.
3731 3732 3733 3734 3735 3736 3737 3738 |
# File 'time.c', line 3731
static VALUE
time_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)));
}
|
Instance Method Details
#+(numeric) ⇒ Time
4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 |
# File 'time.c', line 4454
static VALUE
time_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);
}
|
#-(numeric) ⇒ Time #-(other_time) ⇒ Float
When numeric is given, returns a new Time object whose value is the difference of the numeric value of self and numeric:
t = Time.new(2000) # => 2000-01-01 00:00:00 -0600
t - (60 * 60 * 24) # => 1999-12-31 00:00:00 -0600
t - 0.5 # => 1999-12-31 23:59:59.5 -0600
When other_time is given, returns a Float whose value is the difference of the numeric values of self and other_time in seconds:
t - t # => 0.0
Related: Time#+.
4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 |
# File 'time.c', line 4488
static VALUE
time_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);
}
|
#<=>(other_time) ⇒ -1, ...
Compares self with other_time; returns:
-
-1, ifselfis less thanother_time. -
0, ifselfis equal toother_time. -
1, ifselfis greater thenother_time. -
nil, ifselfandother_timeare incomparable.
Examples:
t = Time.now # => 2007-11-19 08:12:12 -0600
t2 = t + 2592000 # => 2007-12-19 08:12:12 -0600
t <=> t2 # => -1
t2 <=> t # => 1
t = Time.now # => 2007-11-19 08:13:38 -0600
t2 = t + 0.1 # => 2007-11-19 08:13:38 -0600
t.nsec # => 98222999
t2.nsec # => 198222999
t <=> t2 # => -1
t2 <=> t # => 1
t <=> t # => 0
3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 |
# File 'time.c', line 3950
static VALUE
time_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);
}
|
#_dump(*args) ⇒ Object (private)
:nodoc:
5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 |
# File 'time.c', line 5413
static VALUE
time_dump(int argc, VALUE *argv, VALUE time)
{
VALUE str;
rb_check_arity(argc, 0, 1);
str = time_mdump(time);
return str;
}
|
#_load(str) ⇒ Object (private)
:nodoc:
5599 5600 5601 5602 5603 5604 5605 5606 |
# File 'time.c', line 5599
static VALUE
time_load(VALUE klass, VALUE str)
{
VALUE time = time_s_alloc(klass);
time_mload(time, str);
return time;
}
|
#ctime ⇒ String
Returns a string representation of self, formatted by strftime('%a %b %e %T %Y') or its shorthand version strftime('%c'); see Formats for Dates and Times:
t = Time.new(2000, 12, 31, 23, 59, 59, 0.5)
t.ctime # => "Sun Dec 31 23:59:59 2000"
t.strftime('%a %b %e %T %Y') # => "Sun Dec 31 23:59:59 2000"
t.strftime('%c') # => "Sun Dec 31 23:59:59 2000"
Related: Time#to_s, Time#inspect:
t.inspect # => "2000-12-31 23:59:59.5 +000001"
t.to_s # => "2000-12-31 23:59:59 +0000"
4328 4329 4330 4331 4332 |
# File 'time.c', line 4328
static VALUE
time_asctime(VALUE time)
{
return strftimev("%a %b %e %T %Y", time, rb_usascii_encoding());
}
|
#ceil(ndigits = 0) ⇒ Time
Returns a new Time object whose numerical value is greater than or equal to self with its seconds truncated to precision ndigits:
t = Time.utc(2010, 3, 30, 5, 43, 25.123456789r)
t # => 2010-03-30 05:43:25.123456789 UTC
t.ceil # => 2010-03-30 05:43:26 UTC
t.ceil(2) # => 2010-03-30 05:43:25.13 UTC
t.ceil(4) # => 2010-03-30 05:43:25.1235 UTC
t.ceil(6) # => 2010-03-30 05:43:25.123457 UTC
t.ceil(8) # => 2010-03-30 05:43:25.12345679 UTC
t.ceil(10) # => 2010-03-30 05:43:25.123456789 UTC
t = Time.utc(1999, 12, 31, 23, 59, 59)
t # => 1999-12-31 23:59:59 UTC
(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 UTC
Related: Time#floor, Time#round.
4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 |
# File 'time.c', line 4639
static VALUE
time_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 ⇒ String
Returns a string representation of self, formatted by strftime('%a %b %e %T %Y') or its shorthand version strftime('%c'); see Formats for Dates and Times:
t = Time.new(2000, 12, 31, 23, 59, 59, 0.5)
t.ctime # => "Sun Dec 31 23:59:59 2000"
t.strftime('%a %b %e %T %Y') # => "Sun Dec 31 23:59:59 2000"
t.strftime('%c') # => "Sun Dec 31 23:59:59 2000"
Related: Time#to_s, Time#inspect:
t.inspect # => "2000-12-31 23:59:59.5 +000001"
t.to_s # => "2000-12-31 23:59:59 +0000"
4328 4329 4330 4331 4332 |
# File 'time.c', line 4328
static VALUE
time_asctime(VALUE time)
{
return strftimev("%a %b %e %T %Y", time, rb_usascii_encoding());
}
|
#mday ⇒ Integer
4749 4750 4751 4752 4753 4754 4755 4756 4757 |
# File 'time.c', line 4749
static VALUE
time_mday(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
return INT2FIX(tobj->vtm.mday);
}
|
#deconstruct_keys(array_of_names_or_nil) ⇒ Hash
Returns a hash of the name/value pairs, to use in pattern matching. Possible keys are: :year, :month, :day, :yday, :wday, :hour, :min, :sec, :subsec, :dst, :zone.
Possible usages:
t = Time.utc(2022, 10, 5, 21, 25, 30)
if t in wday: 3, day: ..7 # uses deconstruct_keys underneath
puts "first Wednesday of the month"
end
#=> prints "first Wednesday of the month"
case t
in year: ...2022
puts "too old"
in month: ..9
puts "quarter 1-3"
in wday: 1..5, month:
puts "working day in month #{month}"
end
#=> prints "working day in month 10"
Note that deconstruction by pattern can also be combined with class check:
if t in Time(wday: 3, day: ..7)
puts "first Wednesday of the month"
end
5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 |
# File 'time.c', line 5137
static VALUE
time_deconstruct_keys(VALUE time, VALUE keys)
{
struct time_object *tobj;
VALUE h;
long i;
GetTimeval(time, tobj);
MAKE_TM_ENSURE(time, tobj, tobj->vtm.yday != 0);
if (NIL_P(keys)) {
h = rb_hash_new_with_size(11);
rb_hash_aset(h, sym_year, tobj->vtm.year);
rb_hash_aset(h, sym_month, INT2FIX(tobj->vtm.mon));
rb_hash_aset(h, sym_day, INT2FIX(tobj->vtm.mday));
rb_hash_aset(h, sym_yday, INT2FIX(tobj->vtm.yday));
rb_hash_aset(h, sym_wday, INT2FIX(tobj->vtm.wday));
rb_hash_aset(h, sym_hour, INT2FIX(tobj->vtm.hour));
rb_hash_aset(h, sym_min, INT2FIX(tobj->vtm.min));
rb_hash_aset(h, sym_sec, INT2FIX(tobj->vtm.sec));
rb_hash_aset(h, sym_subsec,
quov(w2v(wmod(tobj->timew, WINT2FIXWV(TIME_SCALE))), INT2FIX(TIME_SCALE)));
rb_hash_aset(h, sym_dst, RBOOL(tobj->vtm.isdst));
rb_hash_aset(h, sym_zone, time_zone(time));
return h;
}
if (UNLIKELY(!RB_TYPE_P(keys, T_ARRAY))) {
rb_raise(rb_eTypeError,
"wrong argument type %"PRIsVALUE" (expected Array or nil)",
rb_obj_class(keys));
}
h = rb_hash_new_with_size(RARRAY_LEN(keys));
for (i=0; i<RARRAY_LEN(keys); i++) {
VALUE key = RARRAY_AREF(keys, i);
if (sym_year == key) rb_hash_aset(h, key, tobj->vtm.year);
if (sym_month == key) rb_hash_aset(h, key, INT2FIX(tobj->vtm.mon));
if (sym_day == key) rb_hash_aset(h, key, INT2FIX(tobj->vtm.mday));
if (sym_yday == key) rb_hash_aset(h, key, INT2FIX(tobj->vtm.yday));
if (sym_wday == key) rb_hash_aset(h, key, INT2FIX(tobj->vtm.wday));
if (sym_hour == key) rb_hash_aset(h, key, INT2FIX(tobj->vtm.hour));
if (sym_min == key) rb_hash_aset(h, key, INT2FIX(tobj->vtm.min));
if (sym_sec == key) rb_hash_aset(h, key, INT2FIX(tobj->vtm.sec));
if (sym_subsec == key) {
rb_hash_aset(h, key, quov(w2v(wmod(tobj->timew, WINT2FIXWV(TIME_SCALE))), INT2FIX(TIME_SCALE)));
}
if (sym_dst == key) rb_hash_aset(h, key, RBOOL(tobj->vtm.isdst));
if (sym_zone == key) rb_hash_aset(h, key, time_zone(time));
}
return h;
}
|
#dst? ⇒ Boolean
4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 |
# File 'time.c', line 4996
static VALUE
time_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 RBOOL(tobj->vtm.isdst);
}
|
#eql?(other_time) ⇒ Boolean
Returns true if self and other_time are both Time objects with the exact same time value.
3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 |
# File 'time.c', line 3977
static VALUE
time_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 = 0) ⇒ Time
Returns a new Time object whose numerical value is less than or equal to self with its seconds truncated to precision ndigits:
t = Time.utc(2010, 3, 30, 5, 43, 25.123456789r)
t # => 2010-03-30 05:43:25.123456789 UTC
t.floor # => 2010-03-30 05:43:25 UTC
t.floor(2) # => 2010-03-30 05:43:25.12 UTC
t.floor(4) # => 2010-03-30 05:43:25.1234 UTC
t.floor(6) # => 2010-03-30 05:43:25.123456 UTC
t.floor(8) # => 2010-03-30 05:43:25.12345678 UTC
t.floor(10) # => 2010-03-30 05:43:25.123456789 UTC
t = Time.utc(1999, 12, 31, 23, 59, 59)
t # => 1999-12-31 23:59:59 UTC
(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 UTC
Related: Time#ceil, Time#round.
4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 |
# File 'time.c', line 4594
static VALUE
time_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? ⇒ Boolean
4937 4938 4939 4940 4941 |
# File 'time.c', line 4937
static VALUE
time_friday(VALUE time)
{
wday_p(5);
}
|
#getutc ⇒ Time
4290 4291 4292 4293 4294 |
# File 'time.c', line 4290
static VALUE
time_getgmtime(VALUE time)
{
return time_gmtime(time_dup(time));
}
|
#getlocal(zone = nil) ⇒ Time
Returns a new Time object representing the value of self converted to a given timezone; if zone is nil, the local timezone is used:
t = Time.utc(2000) # => 2000-01-01 00:00:00 UTC
t.getlocal # => 1999-12-31 18:00:00 -0600
t.getlocal('+12:00') # => 2000-01-01 12:00:00 +1200
For forms of argument zone, see Timezone Specifiers.
4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 |
# File 'time.c', line 4243
static VALUE
time_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))) {
off = zone;
if (NIL_P(zone = find_timezone(time, off))) invalid_utc_offset(off);
time = time_dup(time);
if (!zone_localtime(zone, time)) invalid_utc_offset(off);
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 ⇒ Time
4290 4291 4292 4293 4294 |
# File 'time.c', line 4290
static VALUE
time_getgmtime(VALUE time)
{
return time_gmtime(time_dup(time));
}
|
#utc? ⇒ Boolean
Returns true if self represents a time in UTC (GMT):
now = Time.now
# => 2022-08-18 10:24:13.5398485 -0500
now.utc? # => false
now.getutc.utc? # => true
utc = Time.utc(2000, 1, 1, 20, 15, 1)
# => 2000-01-01 20:15:01 UTC
utc.utc? # => true
Time objects created with these methods are considered to be in UTC:
-
Time.utc
-
Time#utc
-
Time#getutc
Objects created in other ways will not be treated as UTC even if the environment variable “TZ” is “UTC”.
Related: Time.utc.
4017 4018 4019 4020 4021 4022 4023 4024 |
# File 'time.c', line 4017
static VALUE
time_utc_p(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
return RBOOL(TZMODE_UTC_P(tobj));
}
|
#utc_offset ⇒ Integer
Returns the offset in seconds between the timezones of UTC and self:
Time.utc(2000, 1, 1).utc_offset # => 0
Time.local(2000, 1, 1).utc_offset # => -21600 # -6*3600, or minus six hours.
5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 |
# File 'time.c', line 5051
VALUE
rb_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;
}
}
|
#utc ⇒ self
4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 |
# File 'time.c', line 4168
static VALUE
time_gmtime(VALUE time)
{
struct time_object *tobj;
struct vtm vtm;
GetTimeval(time, tobj);
if (TZMODE_UTC_P(tobj)) {
if (tobj->vtm.tm_got)
return time;
}
else {
time_modify(time);
}
vtm.zone = str_utc;
GMTIMEW(tobj->timew, &vtm);
time_set_vtm(time, tobj, vtm);
tobj->vtm.tm_got = 1;
TZMODE_SET_UTC(tobj);
return time;
}
|
#utc_offset ⇒ Integer
Returns the offset in seconds between the timezones of UTC and self:
Time.utc(2000, 1, 1).utc_offset # => 0
Time.local(2000, 1, 1).utc_offset # => -21600 # -6*3600, or minus six hours.
5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 |
# File 'time.c', line 5051
VALUE
rb_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 ⇒ Integer
Returns the integer hash code for self.
Related: Object#hash.
4035 4036 4037 4038 4039 4040 4041 4042 |
# File 'time.c', line 4035
static VALUE
time_hash(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
return rb_hash(w2v(tobj->timew));
}
|
#hour ⇒ Integer
4725 4726 4727 4728 4729 4730 4731 4732 4733 |
# File 'time.c', line 4725
static VALUE
time_hour(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
return INT2FIX(tobj->vtm.hour);
}
|
#initialize_copy(time) ⇒ Object
:nodoc:
4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 |
# File 'time.c', line 4045
static VALUE
time_init_copy(VALUE copy, VALUE time)
{
struct time_object *tobj, *tcopy;
if (!OBJ_INIT_COPY(copy, time)) return copy;
GetTimeval(time, tobj);
GetNewTimeval(copy, tcopy);
MEMCPY(tcopy, tobj, struct time_object, 1);
return copy;
}
|
#inspect ⇒ String
4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 |
# File 'time.c', line 4378
static VALUE
time_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 (subsec == INT2FIX(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 {
/* ?TODO: subsecond offset */
long off = NUM2LONG(rb_funcall(tobj->vtm.utc_offset, rb_intern("round"), 0));
char sign = (off < 0) ? (off = -off, '-') : '+';
int sec = off % 60;
int min = (off /= 60) % 60;
off /= 60;
rb_str_catf(str, " %c%.2d%.2d", sign, (int)off, min);
if (sec) rb_str_catf(str, "%.2d", sec);
}
return str;
}
|
#dst? ⇒ Boolean
4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 |
# File 'time.c', line 4996
static VALUE
time_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 RBOOL(tobj->vtm.isdst);
}
|
#localtime ⇒ self, Time #localtime(zone) ⇒ Time
With no argument given:
-
Returns
selfifselfis a local time. -
Otherwise returns a new
Timein the user’s local timezone:t = Time.utc(2000, 1, 1, 20, 15, 1) # => 2000-01-01 20:15:01 UTC t.localtime # => 2000-01-01 14:15:01 -0600
With argument zone given, returns the new Time object created by converting self to the given time zone:
t = Time.utc(2000, 1, 1, 20, 15, 1) # => 2000-01-01 20:15:01 UTC
t.localtime("-09:00") # => 2000-01-01 11:15:01 -0900
For forms of argument zone, see Timezone Specifiers.
4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 |
# File 'time.c', line 4142
static VALUE
time_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 ⇒ Integer
4749 4750 4751 4752 4753 4754 4755 4756 4757 |
# File 'time.c', line 4749
static VALUE
time_mday(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
return INT2FIX(tobj->vtm.mday);
}
|
#min ⇒ Integer
4701 4702 4703 4704 4705 4706 4707 4708 4709 |
# File 'time.c', line 4701
static VALUE
time_min(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
return INT2FIX(tobj->vtm.min);
}
|
#mon ⇒ Integer
4773 4774 4775 4776 4777 4778 4779 4780 4781 |
# File 'time.c', line 4773
static VALUE
time_mon(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
return INT2FIX(tobj->vtm.mon);
}
|
#monday? ⇒ Boolean
4865 4866 4867 4868 4869 |
# File 'time.c', line 4865
static VALUE
time_monday(VALUE time)
{
wday_p(1);
}
|
#mon ⇒ Integer
4773 4774 4775 4776 4777 4778 4779 4780 4781 |
# File 'time.c', line 4773
static VALUE
time_mon(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
return INT2FIX(tobj->vtm.mon);
}
|
#nsec ⇒ Integer
Returns the number of nanoseconds in the subseconds part of self in the range (0..999_999_999); lower-order digits are truncated, not rounded:
t = Time.now # => 2022-07-11 15:04:53.3219637 -0500
t.nsec # => 321963700
Related: Time#subsec (returns exact subseconds).
3887 3888 3889 3890 3891 3892 3893 3894 |
# File 'time.c', line 3887
static VALUE
time_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 = 0) ⇒ Time
Returns a new Time object whose numeric value is that of self, with its seconds value rounded to precision ndigits:
t = Time.utc(2010, 3, 30, 5, 43, 25.123456789r)
t # => 2010-03-30 05:43:25.123456789 UTC
t.round # => 2010-03-30 05:43:25 UTC
t.round(0) # => 2010-03-30 05:43:25 UTC
t.round(1) # => 2010-03-30 05:43:25.1 UTC
t.round(2) # => 2010-03-30 05:43:25.12 UTC
t.round(3) # => 2010-03-30 05:43:25.123 UTC
t.round(4) # => 2010-03-30 05:43:25.1235 UTC
t = Time.utc(1999, 12,31, 23, 59, 59)
t # => 1999-12-31 23:59:59 UTC
(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 UTC
Related: Time#ceil, Time#floor.
4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 |
# File 'time.c', line 4546
static VALUE
time_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? ⇒ Boolean
4955 4956 4957 4958 4959 |
# File 'time.c', line 4955
static VALUE
time_saturday(VALUE time)
{
wday_p(6);
}
|
#sec ⇒ Integer
Returns the integer second of the minute for self, in range (0..60):
t = Time.new(2000, 1, 2, 3, 4, 5, 6)
# => 2000-01-02 03:04:05 +000006
t.sec # => 5
Note: the second value may be 60 when there is a leap second.
Related: Time#year, Time#mon, Time#min.
4677 4678 4679 4680 4681 4682 4683 4684 4685 |
# File 'time.c', line 4677
static VALUE
time_sec(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
return INT2FIX(tobj->vtm.sec);
}
|
#strftime(format_string) ⇒ String
Returns a string representation of self, formatted according to the given string format. See Formats for Dates and Times.
5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 |
# File 'time.c', line 5234
static VALUE
time_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 ⇒ Numeric
3913 3914 3915 3916 3917 3918 3919 3920 |
# File 'time.c', line 3913
static VALUE
time_subsec(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
return quov(w2v(wmod(tobj->timew, WINT2FIXWV(TIME_SCALE))), INT2FIX(TIME_SCALE));
}
|
#sunday? ⇒ Boolean
4847 4848 4849 4850 4851 |
# File 'time.c', line 4847
static VALUE
time_sunday(VALUE time)
{
wday_p(0);
}
|
#thursday? ⇒ Boolean
4919 4920 4921 4922 4923 |
# File 'time.c', line 4919
static VALUE
time_thursday(VALUE time)
{
wday_p(4);
}
|
#to_a ⇒ Array
5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 |
# File 'time.c', line 5082
static VALUE
time_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),
RBOOL(tobj->vtm.isdst),
time_zone(time));
}
|
#to_f ⇒ Float
Returns the value of self as a Float number Epoch seconds; subseconds are included.
The stored value of self is a Rational, which means that the returned value may be approximate:
Time.utc(1970, 1, 1, 0, 0, 0).to_f # => 0.0
Time.utc(1970, 1, 1, 0, 0, 0, 999999).to_f # => 0.999999
Time.utc(1950, 1, 1, 0, 0, 0).to_f # => -631152000.0
Time.utc(1990, 1, 1, 0, 0, 0).to_f # => 631152000.0
Related: Time#to_i, Time#to_r.
3811 3812 3813 3814 3815 3816 3817 3818 |
# File 'time.c', line 3811
static VALUE
time_to_f(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
return rb_Float(rb_time_unmagnify_to_float(tobj->timew));
}
|
#to_i ⇒ Integer
Returns the value of self as integer Epoch seconds; subseconds are truncated (not rounded):
Time.utc(1970, 1, 1, 0, 0, 0).to_i # => 0
Time.utc(1970, 1, 1, 0, 0, 0, 999999).to_i # => 0
Time.utc(1950, 1, 1, 0, 0, 0).to_i # => -631152000
Time.utc(1990, 1, 1, 0, 0, 0).to_i # => 631152000
Related: Time#to_f Time#to_r.
3782 3783 3784 3785 3786 3787 3788 3789 |
# File 'time.c', line 3782
static VALUE
time_to_i(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
return w2v(wdiv(tobj->timew, WINT2FIXWV(TIME_SCALE)));
}
|
#to_r ⇒ Object
Returns the value of self as a Rational exact number of Epoch seconds;
Time.now.to_r # => (16571402750320203/10000000)
Related: Time#to_f, Time#to_i.
3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 |
# File 'time.c', line 3832
static VALUE
time_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 ⇒ String
4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 |
# File 'time.c', line 4350
static VALUE
time_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? ⇒ Boolean
4883 4884 4885 4886 4887 |
# File 'time.c', line 4883
static VALUE
time_tuesday(VALUE time)
{
wday_p(2);
}
|
#nsec ⇒ Integer
Returns the number of nanoseconds in the subseconds part of self in the range (0..999_999_999); lower-order digits are truncated, not rounded:
t = Time.now # => 2022-07-11 15:04:53.3219637 -0500
t.nsec # => 321963700
Related: Time#subsec (returns exact subseconds).
3887 3888 3889 3890 3891 3892 3893 3894 |
# File 'time.c', line 3887
static VALUE
time_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)));
}
|
#to_i ⇒ Integer
Returns the value of self as integer Epoch seconds; subseconds are truncated (not rounded):
Time.utc(1970, 1, 1, 0, 0, 0).to_i # => 0
Time.utc(1970, 1, 1, 0, 0, 0, 999999).to_i # => 0
Time.utc(1950, 1, 1, 0, 0, 0).to_i # => -631152000
Time.utc(1990, 1, 1, 0, 0, 0).to_i # => 631152000
Related: Time#to_f Time#to_r.
3782 3783 3784 3785 3786 3787 3788 3789 |
# File 'time.c', line 3782
static VALUE
time_to_i(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
return w2v(wdiv(tobj->timew, WINT2FIXWV(TIME_SCALE)));
}
|
#usec ⇒ Integer
Returns the number of microseconds in the subseconds part of self in the range (0..999_999); lower-order digits are truncated, not rounded:
t = Time.now # => 2022-07-11 14:59:47.5484697 -0500
t.usec # => 548469
Related: Time#subsec (returns exact subseconds).
3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 |
# File 'time.c', line 3860
static VALUE
time_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 ⇒ Integer
Returns the number of microseconds in the subseconds part of self in the range (0..999_999); lower-order digits are truncated, not rounded:
t = Time.now # => 2022-07-11 14:59:47.5484697 -0500
t.usec # => 548469
Related: Time#subsec (returns exact subseconds).
3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 |
# File 'time.c', line 3860
static VALUE
time_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));
}
|
#utc ⇒ self Also known as: gm
4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 |
# File 'time.c', line 4168
static VALUE
time_gmtime(VALUE time)
{
struct time_object *tobj;
struct vtm vtm;
GetTimeval(time, tobj);
if (TZMODE_UTC_P(tobj)) {
if (tobj->vtm.tm_got)
return time;
}
else {
time_modify(time);
}
vtm.zone = str_utc;
GMTIMEW(tobj->timew, &vtm);
time_set_vtm(time, tobj, vtm);
tobj->vtm.tm_got = 1;
TZMODE_SET_UTC(tobj);
return time;
}
|
#utc? ⇒ Boolean
Returns true if self represents a time in UTC (GMT):
now = Time.now
# => 2022-08-18 10:24:13.5398485 -0500
now.utc? # => false
now.getutc.utc? # => true
utc = Time.utc(2000, 1, 1, 20, 15, 1)
# => 2000-01-01 20:15:01 UTC
utc.utc? # => true
Time objects created with these methods are considered to be in UTC:
-
Time.utc
-
Time#utc
-
Time#getutc
Objects created in other ways will not be treated as UTC even if the environment variable “TZ” is “UTC”.
Related: Time.utc.
4017 4018 4019 4020 4021 4022 4023 4024 |
# File 'time.c', line 4017
static VALUE
time_utc_p(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
return RBOOL(TZMODE_UTC_P(tobj));
}
|
#utc_offset ⇒ Integer
5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 |
# File 'time.c', line 5051
VALUE
rb_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 ⇒ Integer
4821 4822 4823 4824 4825 4826 4827 4828 4829 |
# File 'time.c', line 4821
static VALUE
time_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? ⇒ Boolean
4901 4902 4903 4904 4905 |
# File 'time.c', line 4901
static VALUE
time_wednesday(VALUE time)
{
wday_p(3);
}
|
#yday ⇒ Integer
4971 4972 4973 4974 4975 4976 4977 4978 4979 |
# File 'time.c', line 4971
static VALUE
time_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 ⇒ Integer
4796 4797 4798 4799 4800 4801 4802 4803 4804 |
# File 'time.c', line 4796
static VALUE
time_year(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
return tobj->vtm.year;
}
|
#zone ⇒ String
5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 |
# File 'time.c', line 5019
static VALUE
time_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;
}
|