Skip to content

Commit

Permalink
Fixed yday and wday with timezone [Bug #17024]
Browse files Browse the repository at this point in the history
  • Loading branch information
nobu committed Jul 12, 2020
1 parent 90935ff commit 99a9c3f
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 4 deletions.
4 changes: 4 additions & 0 deletions spec/ruby/core/time/new_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,10 @@

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
Expand Down
2 changes: 2 additions & 0 deletions test/ruby/test_time_tz.rb
Original file line number Diff line number Diff line change
Expand Up @@ -604,6 +604,8 @@ def subtest_new(time_class, tz, tzarg, tzname, abbr, utc_offset)
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)
Expand Down
13 changes: 9 additions & 4 deletions time.c
Original file line number Diff line number Diff line change
Expand Up @@ -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; \
}

/*
Expand Down Expand Up @@ -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);
}

Expand Down

0 comments on commit 99a9c3f

Please sign in to comment.