From 795b03c71c7949c0c260139d6f8a3e289826fdca Mon Sep 17 00:00:00 2001 From: akr Date: Mon, 15 Feb 2010 13:21:10 +0000 Subject: [PATCH] * time.c (time_add): propagate fixed time offset. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26670 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 4 ++++ test/ruby/test_time.rb | 10 ++++++++++ time.c | 5 +++++ 3 files changed, 19 insertions(+) diff --git a/ChangeLog b/ChangeLog index 04d38b99e2..267c42ea9d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Mon Feb 15 22:18:49 2010 Tanaka Akira + + * time.c (time_add): propagate fixed time offset. + Mon Feb 15 17:42:20 2010 NARUSE, Yui * signal.c (USE_SIGALTSTACK): NetBSD can't use sigaltstack(2) diff --git a/test/ruby/test_time.rb b/test/ruby/test_time.rb index 73afed3902..c583b4e873 100644 --- a/test/ruby/test_time.rb +++ b/test/ruby/test_time.rb @@ -27,6 +27,16 @@ class TestTime < Test::Unit::TestCase assert_equal(Time.utc(2000, 3, 21, 3, 30) + (-3 * 3600), Time.utc(2000, 3, 21, 0, 30)) assert_equal(0, (Time.at(1.1) + 0.9).usec) + + assert((Time.utc(2000, 4, 1) + 24).utc?) + assert(!(Time.local(2000, 4, 1) + 24).utc?) + + t = Time.new(2000, 4, 1, 0, 0, 0, "+01:00") + 24 + assert(!t.utc?) + assert_equal(3600, t.utc_offset) + t = Time.new(2000, 4, 1, 0, 0, 0, "+02:00") + 24 + assert(!t.utc?) + assert_equal(7200, t.utc_offset) end def test_time_subt() diff --git a/time.c b/time.c index 7bab3760a6..cf0d7d8c39 100644 --- a/time.c +++ b/time.c @@ -2909,6 +2909,11 @@ time_add(struct time_object *tobj, VALUE offset, int sign) GetTimeval(result, tobj); TIME_SET_UTC(tobj); } + else if (TIME_FIXOFF_P(tobj)) { + VALUE off = tobj->vtm.utc_offset; + GetTimeval(result, tobj); + TIME_SET_FIXOFF(tobj, off); + } return result; }