Class: Time
Class Method Summary collapse
-
.local(*args) ⇒ Object
Like Time.utc, except that the returned
Time
object has the local timezone, not the UTC timezone:. -
.utc(*args) ⇒ Object
Returns a new
Time
object based the on given arguments, in the UTC timezone.
Instance Method Summary collapse
-
#+(numeric) ⇒ Time
Returns a new
Time
object whose value is the sum of the numeric value ofself
and the givennumeric
:. -
#-(time2) ⇒ Object
When
numeric
is given, returns a newTime
object whose value is the difference of the numeric value ofself
andnumeric
:. -
#<=>(other_time) ⇒ -1, ...
Compares
self
withother_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
Time
object whose numerical value is greater than or equal toself
with 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
true
ifself
is in daylight saving time,false
otherwise:. -
#eql?(other_time) ⇒ Boolean
Returns
true
ifself
andother_time
are bothTime
objects with the exact same time value. -
#floor(ndigits = 0) ⇒ Time
Returns a new
Time
object whose numerical value is less than or equal toself
with its seconds truncated to precisionndigits
:. -
#friday? ⇒ Boolean
Returns
true
ifself
represents a Friday,false
otherwise:. -
#getutc ⇒ Time
Returns a new
Time
object representing the value ofself
converted to the UTC timezone:. -
#getlocal(zone = nil) ⇒ Time
Returns a new
Time
object representing the value ofself
converted to a given timezone; ifzone
isnil
, the local timezone is used:. -
#getutc ⇒ Time
Returns a new
Time
object representing the value ofself
converted to the UTC timezone:. -
#utc? ⇒ Boolean
Returns
true
ifself
represents 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
self
with subseconds:. -
#dst? ⇒ Boolean
Returns
true
ifself
is in daylight saving time,false
otherwise:. -
#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
true
ifself
represents a Monday,false
otherwise:. -
#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
self
in the range (0..999_999_999); lower-order digits are truncated, not rounded:. -
#round(ndigits = 0) ⇒ Time
Returns a new
Time
object whose numeric value is that ofself
, with its seconds value rounded to precisionndigits
:. -
#saturday? ⇒ Boolean
Returns
true
ifself
represents a Saturday,false
otherwise:. -
#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
self
as a Numeric (Integer or Rational):. -
#sunday? ⇒ Boolean
Returns
true
ifself
represents a Sunday,false
otherwise:. -
#thursday? ⇒ Boolean
Returns
true
ifself
represents a Thursday,false
otherwise:. -
#to_a ⇒ Array
Returns a 10-element array of values representing
self
:. -
#to_f ⇒ Float
Returns the value of
self
as a Float number Epoch seconds; subseconds are included. -
#to_i ⇒ Integer
Returns the value of
self
as integer Epoch seconds; subseconds are truncated (not rounded):. -
#to_r ⇒ Object
Returns the value of
self
as a Rational exact number of Epoch seconds;. -
#to_s ⇒ String
Returns a string representation of
self
, without subseconds:. -
#tuesday? ⇒ Boolean
Returns
true
ifself
represents a Tuesday,false
otherwise:. -
#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:. -
#to_i ⇒ Integer
Returns the value of
self
as integer Epoch seconds; subseconds are truncated (not rounded):. -
#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:. -
#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:. -
#utc ⇒ self
(also: #gm)
Returns
self
, converted to the UTC timezone:. -
#utc? ⇒ Boolean
Returns
true
ifself
represents 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
true
ifself
represents a Wednesday,false
otherwise:. -
#xmlschema(fraction_digits = 0) ⇒ String
(also: #iso8601)
Returns a string which represents the time as a dateTime defined by XML Schema:.
-
#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
3725 3726 3727 3728 3729 3730 3731 3732 |
# File 'time.c', line 3725
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
, andusec
are 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 ifusec
is 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.
3699 3700 3701 3702 3703 3704 3705 3706 |
# File 'time.c', line 3699
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
4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 |
# File 'time.c', line 4411
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#+.
4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 |
# File 'time.c', line 4445
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
, ifself
is less thanother_time
. -
0
, ifself
is equal toother_time
. -
1
, ifself
is greater thenother_time
. -
nil
, ifself
andother_time
are 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
3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 |
# File 'time.c', line 3918
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:
5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 |
# File 'time.c', line 5500
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:
5686 5687 5688 5689 5690 5691 5692 5693 |
# File 'time.c', line 5686
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"
4285 4286 4287 4288 4289 |
# File 'time.c', line 4285
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.
4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 |
# File 'time.c', line 4596
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"
4285 4286 4287 4288 4289 |
# File 'time.c', line 4285
static VALUE
time_asctime(VALUE time)
{
return strftimev("%a %b %e %T %Y", time, rb_usascii_encoding());
}
|
#mday ⇒ Integer
4706 4707 4708 4709 4710 4711 4712 4713 4714 |
# File 'time.c', line 4706
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
5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 |
# File 'time.c', line 5094
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
4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 |
# File 'time.c', line 4953
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.
3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 |
# File 'time.c', line 3945
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.
4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 |
# File 'time.c', line 4551
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
4894 4895 4896 4897 4898 |
# File 'time.c', line 4894
static VALUE
time_friday(VALUE time)
{
wday_p(5);
}
|
#getutc ⇒ Time
4247 4248 4249 4250 4251 |
# File 'time.c', line 4247
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.
4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 |
# File 'time.c', line 4200
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
4247 4248 4249 4250 4251 |
# File 'time.c', line 4247
static VALUE
time_getgmtime(VALUE time)
{
return time_gmtime(time_dup(time));
}
|
#utc? ⇒ Boolean
3974 3975 3976 3977 3978 3979 3980 3981 |
# File 'time.c', line 3974
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.
5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 |
# File 'time.c', line 5008
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
4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 |
# File 'time.c', line 4125
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.
5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 |
# File 'time.c', line 5008
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.
3992 3993 3994 3995 3996 3997 3998 3999 |
# File 'time.c', line 3992
static VALUE
time_hash(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
return rb_hash(w2v(tobj->timew));
}
|
#hour ⇒ Integer
4682 4683 4684 4685 4686 4687 4688 4689 4690 |
# File 'time.c', line 4682
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:
4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 |
# File 'time.c', line 4002
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
4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 |
# File 'time.c', line 4335
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
4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 |
# File 'time.c', line 4953
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
self
ifself
is a local time. -
Otherwise returns a new
Time
in 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.
4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 |
# File 'time.c', line 4099
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
4706 4707 4708 4709 4710 4711 4712 4713 4714 |
# File 'time.c', line 4706
static VALUE
time_mday(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
return INT2FIX(tobj->vtm.mday);
}
|
#min ⇒ Integer
4658 4659 4660 4661 4662 4663 4664 4665 4666 |
# File 'time.c', line 4658
static VALUE
time_min(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
return INT2FIX(tobj->vtm.min);
}
|
#mon ⇒ Integer
4730 4731 4732 4733 4734 4735 4736 4737 4738 |
# File 'time.c', line 4730
static VALUE
time_mon(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
return INT2FIX(tobj->vtm.mon);
}
|
#monday? ⇒ Boolean
4822 4823 4824 4825 4826 |
# File 'time.c', line 4822
static VALUE
time_monday(VALUE time)
{
wday_p(1);
}
|
#mon ⇒ Integer
4730 4731 4732 4733 4734 4735 4736 4737 4738 |
# File 'time.c', line 4730
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).
3855 3856 3857 3858 3859 3860 3861 3862 |
# File 'time.c', line 3855
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.
4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 |
# File 'time.c', line 4503
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
4912 4913 4914 4915 4916 |
# File 'time.c', line 4912
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.
4634 4635 4636 4637 4638 4639 4640 4641 4642 |
# File 'time.c', line 4634
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.
5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 |
# File 'time.c', line 5191
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
3881 3882 3883 3884 3885 3886 3887 3888 |
# File 'time.c', line 3881
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
4804 4805 4806 4807 4808 |
# File 'time.c', line 4804
static VALUE
time_sunday(VALUE time)
{
wday_p(0);
}
|
#thursday? ⇒ Boolean
4876 4877 4878 4879 4880 |
# File 'time.c', line 4876
static VALUE
time_thursday(VALUE time)
{
wday_p(4);
}
|
#to_a ⇒ Array
5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 |
# File 'time.c', line 5039
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.
3779 3780 3781 3782 3783 3784 3785 3786 |
# File 'time.c', line 3779
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.
3750 3751 3752 3753 3754 3755 3756 3757 |
# File 'time.c', line 3750
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.
3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 |
# File 'time.c', line 3800
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
4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 |
# File 'time.c', line 4307
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
4840 4841 4842 4843 4844 |
# File 'time.c', line 4840
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).
3855 3856 3857 3858 3859 3860 3861 3862 |
# File 'time.c', line 3855
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.
3750 3751 3752 3753 3754 3755 3756 3757 |
# File 'time.c', line 3750
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).
3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 |
# File 'time.c', line 3828
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).
3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 |
# File 'time.c', line 3828
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
4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 |
# File 'time.c', line 4125
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
3974 3975 3976 3977 3978 3979 3980 3981 |
# File 'time.c', line 3974
static VALUE
time_utc_p(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
return RBOOL(TZMODE_UTC_P(tobj));
}
|
#utc_offset ⇒ Integer
5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 |
# File 'time.c', line 5008
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
4778 4779 4780 4781 4782 4783 4784 4785 4786 |
# File 'time.c', line 4778
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
4858 4859 4860 4861 4862 |
# File 'time.c', line 4858
static VALUE
time_wednesday(VALUE time)
{
wday_p(3);
}
|
#xmlschema(fraction_digits = 0) ⇒ String Also known as: iso8601
Returns a string which represents the time as a dateTime defined by XML Schema:
CCYY-MM-DDThh:mm:ssTZD
CCYY-MM-DDThh:mm:ss.sssTZD
where TZD is Z or [+-]hh:mm.
If self is a UTC time, Z is used as TZD. [+-]hh:mm is used otherwise.
fraction_digits
specifies a number of digits to use for fractional seconds. Its default value is 0.
t = Time.now
t.xmlschema # => "2011-10-05T22:26:12-04:00"
5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 |
# File 'time.c', line 5244
static VALUE
time_xmlschema(int argc, VALUE *argv, VALUE time)
{
long fraction_digits = 0;
rb_check_arity(argc, 0, 1);
if (argc > 0) {
fraction_digits = NUM2LONG(argv[0]);
if (fraction_digits < 0) {
fraction_digits = 0;
}
}
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
const long size_after_year = sizeof("-MM-DDTHH:MM:SS+ZH:ZM") + fraction_digits
+ (fraction_digits > 0);
VALUE str;
char *ptr;
# define fill_digits_long(len, prec, n) \
for (int fill_it = 1, written = snprintf(ptr, len, "%0*ld", prec, n); \
fill_it; ptr += written, fill_it = 0)
if (FIXNUM_P(tobj->vtm.year)) {
long year = FIX2LONG(tobj->vtm.year);
int year_width = (year < 0) + rb_strlen_lit("YYYY");
int w = (year >= -9999 && year <= 9999 ? year_width : (year < 0) + (int)DECIMAL_SIZE_OF(year));
str = rb_usascii_str_new(0, w + size_after_year);
ptr = RSTRING_PTR(str);
fill_digits_long(w + 1, year_width, year) {
if (year >= -9999 && year <= 9999) {
RUBY_ASSERT(written == year_width);
}
else {
RUBY_ASSERT(written >= year_width);
RUBY_ASSERT(written <= w);
}
}
}
else {
str = rb_int2str(tobj->vtm.year, 10);
rb_str_modify_expand(str, size_after_year);
ptr = RSTRING_END(str);
}
# define fill_2(c, n) (*ptr++ = c, *ptr++ = '0' + (n) / 10, *ptr++ = '0' + (n) % 10)
fill_2('-', tobj->vtm.mon);
fill_2('-', tobj->vtm.mday);
fill_2('T', tobj->vtm.hour);
fill_2(':', tobj->vtm.min);
fill_2(':', tobj->vtm.sec);
if (fraction_digits > 0) {
VALUE subsecx = tobj->vtm.subsecx;
long subsec;
int digits = -1;
*ptr++ = '.';
if (fraction_digits <= TIME_SCALE_NUMDIGITS) {
digits = TIME_SCALE_NUMDIGITS - (int)fraction_digits;
}
else {
long w = fraction_digits - TIME_SCALE_NUMDIGITS; /* > 0 */
subsecx = mulv(subsecx, rb_int_positive_pow(10, (unsigned long)w));
if (!RB_INTEGER_TYPE_P(subsecx)) { /* maybe Rational */
subsecx = rb_Integer(subsecx);
}
if (FIXNUM_P(subsecx)) digits = 0;
}
if (digits >= 0 && fraction_digits < INT_MAX) {
subsec = NUM2LONG(subsecx);
if (digits > 0) subsec /= (long)pow(10, digits);
fill_digits_long(fraction_digits + 1, (int)fraction_digits, subsec) {
RUBY_ASSERT(written == (int)fraction_digits);
}
}
else {
subsecx = rb_int2str(subsecx, 10);
long len = RSTRING_LEN(subsecx);
if (fraction_digits > len) {
memset(ptr, '0', fraction_digits - len);
}
else {
len = fraction_digits;
}
ptr += fraction_digits;
memcpy(ptr - len, RSTRING_PTR(subsecx), len);
}
}
if (TZMODE_UTC_P(tobj)) {
*ptr = 'Z';
ptr++;
}
else {
long offset = NUM2LONG(rb_time_utc_offset(time));
char sign = offset < 0 ? '-' : '+';
if (offset < 0) offset = -offset;
offset /= 60;
fill_2(sign, offset / 60);
fill_2(':', offset % 60);
}
const char *const start = RSTRING_PTR(str);
rb_str_set_len(str, ptr - start); // We could skip coderange scanning as we know it's full ASCII.
return str;
}
|
#yday ⇒ Integer
4928 4929 4930 4931 4932 4933 4934 4935 4936 |
# File 'time.c', line 4928
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
4753 4754 4755 4756 4757 4758 4759 4760 4761 |
# File 'time.c', line 4753
static VALUE
time_year(VALUE time)
{
struct time_object *tobj;
GetTimeval(time, tobj);
MAKE_TM(time, tobj);
return tobj->vtm.year;
}
|
#zone ⇒ String
4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 |
# File 'time.c', line 4976
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;
}
|