Bug #18293 ยป patch.diff
time.c | ||
---|---|---|
return t;
|
||
}
|
||
enum {
|
||
TMOPT_IN,
|
||
TMOPT_MAX_
|
||
};
|
||
static bool
|
||
get_tmopt(VALUE opts, VALUE vals[TMOPT_MAX_])
|
||
{
|
||
ID ids[TMOPT_MAX_];
|
||
if (NIL_P(opts)) return false;
|
||
CONST_ID(ids[TMOPT_IN], "in");
|
||
rb_get_kwargs(opts, ids, 0, TMOPT_MAX_, vals);
|
||
return true;
|
||
}
|
||
static VALUE
|
||
time_s_at_c(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;
|
||
}
|
||
static const char months[][4] = {
|
||
"jan", "feb", "mar", "apr", "may", "jun",
|
||
"jul", "aug", "sep", "oct", "nov", "dec",
|
||
... | ... | |
rb_include_module(rb_cTime, rb_mComparable);
|
||
rb_define_alloc_func(rb_cTime, time_s_alloc);
|
||
rb_define_singleton_method(rb_cTime, "at_c", time_s_at_c, -1);
|
||
rb_define_singleton_method(rb_cTime, "utc", time_s_mkutc, -1);
|
||
rb_define_singleton_method(rb_cTime, "local", time_s_mktime, -1);
|
||
rb_define_alias(rb_singleton_class(rb_cTime), "gm", "utc");
|
timev.rb | ||
---|---|---|
__builtin.time_s_at(time, subsec, unit, __builtin.arg!(:in), nosubsec, nounit)
|
||
end
|
||
def self.at_1arg(time)
|
||
__builtin.time_s_at(time, true, true, nil, true, true)
|
||
end
|
||
# Returns a new \Time object based the on given arguments.
|
||
#
|
||
# With no positional arguments, returns the value of Time.now:
|