static struct mrb_time* time_mktime(mrb_state *mrb, mrb_int ayear, mrb_int amonth, mrb_int aday, mrb_int ahour, mrb_int amin, mrb_int asec, mrb_int ausec, enum mrb_timezone timezone) { time_t nowsecs; struct tm nowtime = { 0 }; nowtime.tm_year = (int)ayear - 1900; nowtime.tm_mon = (int)amonth - 1; nowtime.tm_mday = (int)aday; nowtime.tm_hour = (int)ahour; nowtime.tm_min = (int)amin; nowtime.tm_sec = (int)asec; nowtime.tm_isdst = -1; if (timezone == MRB_TIMEZONE_UTC) { nowsecs = timegm(&nowtime); } else { nowsecs = mktime(&nowtime); } if (nowsecs < 0) { mrb_raise(mrb, E_ARGUMENT_ERROR, "Not a valid time."); } return mrb_time_alloc(mrb, nowsecs, ausec, timezone); }
static mrb_value mrb_time_make(mrb_state *mrb, struct RClass *c, double sec, double usec, enum mrb_timezone timezone) { return mrb_time_wrap(mrb, c, mrb_time_alloc(mrb, sec, usec, timezone)); }
static mrb_value mrb_time_make(mrb_state *mrb, struct RClass *c, mrb_float seconds, enum mrb_timezone timezone) { return mrb_time_wrap(mrb, c, mrb_time_alloc(mrb, seconds, timezone)); }