Return fixed values at subsec, utc_offset, and isdst

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65305 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2018-10-22 13:53:20 +00:00
parent f289e3994b
commit 385b772149

40
time.c
View File

@ -41,7 +41,9 @@ static ID id_nanosecond, id_microsecond, id_millisecond, id_nsec, id_usec;
static ID id_local_to_utc, id_utc_to_local; static ID id_local_to_utc, id_utc_to_local;
static ID id_year, id_mon, id_mday, id_hour, id_min, id_sec, id_isdst, id_name; static ID id_year, id_mon, id_mday, id_hour, id_min, id_sec, id_isdst, id_name;
#define TM_IS_TIME 1 #ifndef TM_IS_TIME
#define TM_IS_TIME 0
#endif
#define NDIV(x,y) (-(-((x)+1)/(y))-1) #define NDIV(x,y) (-(-((x)+1)/(y))-1)
#define NMOD(x,y) ((y)-(-((x)+1)%(y))-1) #define NMOD(x,y) ((y)-(-((x)+1)%(y))-1)
@ -5127,6 +5129,34 @@ tm_to_time(VALUE tm)
#endif #endif
} }
#if !TM_IS_TIME
static VALUE
tm_zero(VALUE tm)
{
return INT2FIX(0);
}
#define tm_subsec tm_zero
#define tm_utc_offset tm_zero
static VALUE
tm_isdst(VALUE tm)
{
return Qfalse;
}
static VALUE
tm_to_s(VALUE tm)
{
const VALUE *p = RSTRUCT_CONST_PTR(tm);
return rb_sprintf("%.4"PRIsVALUE"-%.2"PRIsVALUE"-%.2"PRIsVALUE" "
"%.2"PRIsVALUE":%.2"PRIsVALUE":%.2"PRIsVALUE" "
"UTC",
p[5], p[4], p[3], p[2], p[1], p[0]);
}
#endif
VALUE VALUE
rb_time_zone_abbreviation(VALUE zone, VALUE time) rb_time_zone_abbreviation(VALUE zone, VALUE time)
{ {
@ -5285,9 +5315,13 @@ Init_Time(void)
rb_cTimeTM = rb_struct_define_under(rb_cTime, "TM", rb_cTimeTM = rb_struct_define_under(rb_cTime, "TM",
"sec", "min", "hour", "sec", "min", "hour",
"mday", "mon", "year", "mday", "mon", "year",
"subsec", "isdst",
"to_i", NULL); "to_i", NULL);
rb_alias(rb_cTimeTM, rb_intern("dst?"), id_isdst); rb_define_method(rb_cTimeTM, "subsec", tm_subsec, 0);
rb_define_method(rb_cTimeTM, "utc_offset", tm_utc_offset, 0);
rb_define_method(rb_cTimeTM, "to_s", tm_to_s, 0);
rb_define_method(rb_cTimeTM, "inspect", tm_to_s, 0);
rb_define_method(rb_cTimeTM, "isdst", tm_isdst, 0);
rb_define_method(rb_cTimeTM, "dst?", tm_isdst, 0);
#endif #endif
rb_define_method(rb_cTimeTM, "initialize", tm_initialize, -1); rb_define_method(rb_cTimeTM, "initialize", tm_initialize, -1);
rb_define_method(rb_cTimeTM, "utc", tm_to_time, 0); rb_define_method(rb_cTimeTM, "utc", tm_to_time, 0);