Commit 48ff4f2d authored by Yukihiro Matsumoto's avatar Yukihiro Matsumoto

time - time should not return time, but number

parent e88e3052
......@@ -136,13 +136,13 @@ mrb_time_update_datetime(struct mrb_time *self)
{
struct tm *aid;
if(self->timezone == MRB_TIMEZONE_UTC) {
if (self->timezone == MRB_TIMEZONE_UTC) {
aid = gmtime_r(&self->sec, &self->datetime);
}
else {
aid = localtime_r(&self->sec, &self->datetime);
}
if(!aid) return NULL;
if (!aid) return NULL;
#ifdef NO_GMTIME_R
self->datetime = *aid; // copy data
#endif
......@@ -339,7 +339,7 @@ mrb_time_plus(mrb_state *mrb, mrb_value self)
mrb_get_args(mrb, "f", &f);
tm = mrb_get_datatype(mrb, self, &mrb_time_type);
if(!tm) return mrb_nil_value();
if (!tm) return mrb_nil_value();
f += tm->sec;
f += (mrb_float)tm->usec / 1.0e6;
return mrb_time_make(mrb, mrb_obj_class(mrb, self), f, tm->timezone);
......@@ -349,14 +349,24 @@ static mrb_value
mrb_time_minus(mrb_state *mrb, mrb_value self)
{
mrb_float f;
struct mrb_time *tm;
mrb_value other;
struct mrb_time *tm, *tm2;
mrb_get_args(mrb, "f", &f);
mrb_get_args(mrb, "o", &other);
tm = mrb_get_datatype(mrb, self, &mrb_time_type);
if(!tm) return mrb_nil_value();
f -= tm->sec;
f -= (mrb_float)tm->usec / 1.0e6;
return mrb_time_make(mrb, mrb_obj_class(mrb, self), f, tm->timezone);
if (!tm) return mrb_nil_value();
tm2 = mrb_get_datatype(mrb, other, &mrb_time_type);
if (tm2) {
f = (mrb_float)(tm->sec - tm2->sec)
+ (mrb_float)(tm->usec - tm2->usec) / 1.0e6;
return mrb_float_value(f);
}
else {
mrb_get_args(mrb, "f", &f);
return mrb_time_make(mrb, mrb_obj_class(mrb, self), f, tm->timezone);
}
}
/* 15.2.19.7.30 */
......@@ -367,7 +377,7 @@ mrb_time_wday(mrb_state *mrb, mrb_value self)
struct mrb_time *tm;
tm = mrb_get_datatype(mrb, self, &mrb_time_type);
if(!tm) return mrb_nil_value();
if (!tm) return mrb_nil_value();
return mrb_fixnum_value(tm->datetime.tm_wday);
}
......@@ -379,7 +389,7 @@ mrb_time_yday(mrb_state *mrb, mrb_value self)
struct mrb_time *tm;
tm = mrb_check_datatype(mrb, self, &mrb_time_type);
if(!tm) return mrb_nil_value();
if (!tm) return mrb_nil_value();
return mrb_fixnum_value(tm->datetime.tm_yday);
}
......@@ -391,7 +401,7 @@ mrb_time_year(mrb_state *mrb, mrb_value self)
struct mrb_time *tm;
tm = mrb_get_datatype(mrb, self, &mrb_time_type);
if(!tm) return mrb_nil_value();
if (!tm) return mrb_nil_value();
return mrb_fixnum_value(tm->datetime.tm_year + 1900);
}
......@@ -403,9 +413,9 @@ mrb_time_zone(mrb_state *mrb, mrb_value self)
struct mrb_time *tm;
tm = mrb_get_datatype(mrb, self, &mrb_time_type);
if(!tm) return mrb_nil_value();
if(tm->timezone <= MRB_TIMEZONE_NONE) return mrb_nil_value();
if(tm->timezone >= MRB_TIMEZONE_LAST) return mrb_nil_value();
if (!tm) return mrb_nil_value();
if (tm->timezone <= MRB_TIMEZONE_NONE) return mrb_nil_value();
if (tm->timezone >= MRB_TIMEZONE_LAST) return mrb_nil_value();
return mrb_str_new_cstr(mrb, timezone_names[tm->timezone]);
}
......@@ -419,7 +429,7 @@ mrb_time_asctime(mrb_state *mrb, mrb_value self)
char buf[256];
tm = mrb_get_datatype(mrb, self, &mrb_time_type);
if(!tm) return mrb_nil_value();
if (!tm) return mrb_nil_value();
d = &tm->datetime;
snprintf(buf, 256, "%s %s %02d %02d:%02d:%02d %s%d",
wday_names[d->tm_wday], mon_names[d->tm_mon], d->tm_mday,
......@@ -437,7 +447,7 @@ mrb_time_day(mrb_state *mrb, mrb_value self)
struct mrb_time *tm;
tm = mrb_get_datatype(mrb, self, &mrb_time_type);
if(!tm) return mrb_nil_value();
if (!tm) return mrb_nil_value();
return mrb_fixnum_value(tm->datetime.tm_mday);
}
......@@ -450,7 +460,7 @@ mrb_time_dstp(mrb_state *mrb, mrb_value self)
struct mrb_time *tm;
tm = mrb_get_datatype(mrb, self, &mrb_time_type);
if(!tm) return mrb_nil_value();
if (!tm) return mrb_nil_value();
return mrb_bool_value(tm->datetime.tm_isdst);
}
......@@ -462,7 +472,7 @@ mrb_time_hour(mrb_state *mrb, mrb_value self)
struct mrb_time *tm;
tm = mrb_get_datatype(mrb, self, &mrb_time_type);
if(!tm) return mrb_nil_value();
if (!tm) return mrb_nil_value();
return mrb_fixnum_value(tm->datetime.tm_hour);
}
......@@ -520,7 +530,7 @@ mrb_time_localtime(mrb_state *mrb, mrb_value self)
struct mrb_time *tm;
tm = mrb_get_datatype(mrb, self, &mrb_time_type);
if(!tm) return self;
if (!tm) return self;
tm->timezone = MRB_TIMEZONE_LOCAL;
mrb_time_update_datetime(tm);
return self;
......@@ -534,7 +544,7 @@ mrb_time_mday(mrb_state *mrb, mrb_value self)
struct mrb_time *tm;
tm = mrb_get_datatype(mrb, self, &mrb_time_type);
if(!tm) return mrb_nil_value();
if (!tm) return mrb_nil_value();
return mrb_fixnum_value(tm->datetime.tm_mday);
}
......@@ -546,7 +556,7 @@ mrb_time_min(mrb_state *mrb, mrb_value self)
struct mrb_time *tm;
tm = mrb_get_datatype(mrb, self, &mrb_time_type);
if(!tm) return mrb_nil_value();
if (!tm) return mrb_nil_value();
return mrb_fixnum_value(tm->datetime.tm_min);
}
......@@ -558,7 +568,7 @@ mrb_time_mon(mrb_state *mrb, mrb_value self)
struct mrb_time *tm;
tm = mrb_get_datatype(mrb, self, &mrb_time_type);
if(!tm) return mrb_nil_value();
if (!tm) return mrb_nil_value();
return mrb_fixnum_value(tm->datetime.tm_mon + 1);
}
......@@ -570,7 +580,7 @@ mrb_time_sec(mrb_state *mrb, mrb_value self)
struct mrb_time *tm;
tm = mrb_get_datatype(mrb, self, &mrb_time_type);
if(!tm) return mrb_nil_value();
if (!tm) return mrb_nil_value();
return mrb_fixnum_value(tm->datetime.tm_sec);
}
......@@ -583,7 +593,7 @@ mrb_time_to_f(mrb_state *mrb, mrb_value self)
struct mrb_time *tm;
tm = mrb_get_datatype(mrb, self, &mrb_time_type);
if(!tm) return mrb_nil_value();
if (!tm) return mrb_nil_value();
return mrb_float_value((mrb_float)tm->sec + (mrb_float)tm->usec/1.0e6);
}
......@@ -595,7 +605,7 @@ mrb_time_to_i(mrb_state *mrb, mrb_value self)
struct mrb_time *tm;
tm = mrb_get_datatype(mrb, self, &mrb_time_type);
if(!tm) return mrb_nil_value();
if (!tm) return mrb_nil_value();
return mrb_fixnum_value(tm->sec);
}
......@@ -607,7 +617,7 @@ mrb_time_usec(mrb_state *mrb, mrb_value self)
struct mrb_time *tm;
tm = mrb_get_datatype(mrb, self, &mrb_time_type);
if(!tm) return mrb_nil_value();
if (!tm) return mrb_nil_value();
return mrb_fixnum_value(tm->usec);
}
......@@ -633,7 +643,7 @@ mrb_time_utcp(mrb_state *mrb, mrb_value self)
{
struct mrb_time *tm;
tm = mrb_get_datatype(mrb, self, &mrb_time_type);
if(!tm) return mrb_nil_value();
if (!tm) return mrb_nil_value();
return mrb_bool_value(tm->timezone == MRB_TIMEZONE_UTC);
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment