diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2020-07-12 14:09:48 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2020-07-12 21:58:13 +0900 |
commit | 99a9c3fe2eaab8157765d792dc871da6daea0327 (patch) | |
tree | ae623193dfd48aa2af9280d878ca382f4063e68e | |
parent | 90935ff29424c4542d2122f4097ec684cb4b3adf (diff) | |
download | ruby-99a9c3fe2eaab8157765d792dc871da6daea0327.tar.gz |
Fixed yday and wday with timezone [Bug #17024]
-rw-r--r-- | spec/ruby/core/time/new_spec.rb | 4 | ||||
-rw-r--r-- | test/ruby/test_time_tz.rb | 2 | ||||
-rw-r--r-- | time.c | 13 |
3 files changed, 15 insertions, 4 deletions
diff --git a/spec/ruby/core/time/new_spec.rb b/spec/ruby/core/time/new_spec.rb index 3cafd46db7..1a2f93e2ef 100644 --- a/spec/ruby/core/time/new_spec.rb +++ b/spec/ruby/core/time/new_spec.rb @@ -129,6 +129,10 @@ ruby_version_is "2.6" do time.zone.should == zone time.utc_offset.should == 5*3600+30*60 + ruby_version_is "2.8" do + time.wday.should == 6 + time.yday.should == 1 + end end it "accepts timezone argument that must have #local_to_utc and #utc_to_local methods" do diff --git a/test/ruby/test_time_tz.rb b/test/ruby/test_time_tz.rb index a95f9e74b4..1d86d0c9f7 100644 --- a/test/ruby/test_time_tz.rb +++ b/test/ruby/test_time_tz.rb @@ -604,6 +604,8 @@ module TestTimeTZ::WithTZ assert_equal([2018, 9, 1, 12, 0, 0, tz], [t.year, t.mon, t.mday, t.hour, t.min, t.sec, t.zone]) h, m = (-utc_offset / 60).divmod(60) assert_equal(time_class.utc(2018, 9, 1, 12+h, m, 0).to_i, t.to_i) + assert_equal(6, t.wday) + assert_equal(244, t.yday) end def subtest_now(time_class, tz, tzarg, tzname, abbr, utc_offset) @@ -4580,14 +4580,15 @@ time_wday(VALUE time) GetTimeval(time, tobj); MAKE_TM(time, tobj); + if (tobj->vtm.wday == VTM_WDAY_INITVAL) { + VALUE zone = tobj->vtm.zone; + if (!NIL_P(zone)) zone_localtime(zone, time); + } return INT2FIX((int)tobj->vtm.wday); } #define wday_p(n) {\ - struct time_object *tobj;\ - GetTimeval(time, tobj);\ - MAKE_TM(time, tobj);\ - return (tobj->vtm.wday == (n)) ? Qtrue : Qfalse;\ + return (time_wday(time) == INT2FIX(n)) ? Qtrue : Qfalse; \ } /* @@ -4719,6 +4720,10 @@ time_yday(VALUE time) GetTimeval(time, tobj); MAKE_TM(time, tobj); + if (tobj->vtm.yday == 0) { + VALUE zone = tobj->vtm.zone; + if (!NIL_P(zone)) zone_localtime(zone, time); + } return INT2FIX(tobj->vtm.yday); } |