From a03411b63ef86badb8fe03d14e6443420131717b Mon Sep 17 00:00:00 2001 From: akr Date: Sat, 5 Nov 2016 14:59:51 +0000 Subject: [PATCH] fix vtm_add_offset yday on last day of year. * time.c (vtm_add_offset): Fix yday on last day of year. [ruby-core:72878] [Bug #11994] Fixed by Andrew White. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56599 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 9 +++++++-- test/ruby/test_time.rb | 17 +++++++++++++++++ time.c | 2 +- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index f4204f38c0..e476fa494d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Sat Nov 5 23:46:03 2016 Tanaka Akira + + * time.c (vtm_add_offset): Fix yday on last day of year. + [ruby-core:72878] [Bug #11994] Fixed by Andrew White. + Sat Nov 5 23:30:41 2016 Shugo Maeda * lib/net/http.rb (Net::HTTP.post): new convenience method to send @@ -64,7 +69,7 @@ Sat Nov 5 17:29:06 2016 Tanaka Akira * lib/resolv.rb (Resolv::DNS#extract_resources): Use each_resource instead of each_answer. - [ruby-core:75461] [Bug#12372] reported by Rafael Fernandez Lopez. + [ruby-core:75461] [Bug #12372] reported by Rafael Fernandez Lopez. Sat Nov 5 17:18:24 2016 NARUSE, Yui @@ -106,7 +111,7 @@ Sat Nov 5 13:52:52 2016 Akinori MUSHA Sat Nov 5 12:14:31 2016 Tanaka Akira * ext/pathname/pathname.c (Pathname#empty?): New method. - [ruby-core:76404] [Feature#12596] Proposed by John Backus. + [ruby-core:76404] [Feature #12596] Proposed by John Backus. Sat Nov 5 11:53:02 2016 Shugo Maeda diff --git a/test/ruby/test_time.rb b/test/ruby/test_time.rb index 5a2ad42491..60bed87c9c 100644 --- a/test/ruby/test_time.rb +++ b/test/ruby/test_time.rb @@ -1072,4 +1072,21 @@ class TestTime < Test::Unit::TestCase assert_equal now2, now3 assert_equal now2.zone, now3.zone end + + def test_strftime_yearday_on_last_day_of_year + t = Time.utc(2015, 12, 31, 0, 0, 0) + assert_equal("365", t.strftime("%j")) + t = Time.utc(2016, 12, 31, 0, 0, 0) + assert_equal("366", t.strftime("%j")) + + t = Time.utc(2015, 12, 30, 20, 0, 0).getlocal("+05:00") + assert_equal("365", t.strftime("%j")) + t = Time.utc(2016, 12, 30, 20, 0, 0).getlocal("+05:00") + assert_equal("366", t.strftime("%j")) + + t = Time.utc(2016, 1, 1, 1, 0, 0).getlocal("-05:00") + assert_equal("365", t.strftime("%j")) + t = Time.utc(2017, 1, 1, 1, 0, 0).getlocal("-05:00") + assert_equal("366", t.strftime("%j")) + end end diff --git a/time.c b/time.c index ec9a04baca..708d9a7d9f 100644 --- a/time.c +++ b/time.c @@ -1889,7 +1889,7 @@ vtm_add_offset(struct vtm *vtm, VALUE off) vtm->mday = 31; vtm->mon = 12; /* December */ vtm->year = sub(vtm->year, INT2FIX(1)); - vtm->yday = leap_year_v_p(vtm->year) ? 365 : 364; + vtm->yday = leap_year_v_p(vtm->year) ? 366 : 365; } else if (vtm->mday == 1) { const int *days_in_month = leap_year_v_p(vtm->year) ?