mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
time - time should not return time, but number
This commit is contained in:
+38
-28
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user