From 482bbde6e25620b340e28423c08e3cee941c438b Mon Sep 17 00:00:00 2001
From: nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
Date: Mon, 2 Jul 2018 07:46:38 +0000
Subject: [PATCH] time.c: [DOC] Time#localtime

* time.c: state that Time#localtime does nothing when nothing
  changes.  [ruby-core:87675] [Bug #14880]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63823 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
---
 spec/ruby/core/time/localtime_spec.rb | 13 +++++++++++++
 test/ruby/test_time_tz.rb             | 11 +++++++++++
 time.c                                |  3 +++
 3 files changed, 27 insertions(+)

diff --git a/spec/ruby/core/time/localtime_spec.rb b/spec/ruby/core/time/localtime_spec.rb
index 56c9d37bc8..5592150ca2 100644
--- a/spec/ruby/core/time/localtime_spec.rb
+++ b/spec/ruby/core/time/localtime_spec.rb
@@ -90,6 +90,19 @@ describe "Time#localtime" do
 
       t.utc_offset.should == -18000
     end
+
+    it "does nothing if already in a local time zone" do
+      time = with_timezone("America/New_York") do
+        break Time.new(2005, 2, 27, 22, 50, 0)
+      end
+      zone = time.zone
+
+      with_timezone("Europe/Amsterdam") do
+        time.localtime
+      end
+
+      time.zone.should == zone
+    end
   end
 
   describe "with an argument that responds to #to_str" do
diff --git a/test/ruby/test_time_tz.rb b/test/ruby/test_time_tz.rb
index b32caff9c5..f14800a1ad 100644
--- a/test/ruby/test_time_tz.rb
+++ b/test/ruby/test_time_tz.rb
@@ -105,6 +105,17 @@ class TestTimeTZ < Test::Unit::TestCase
     assert_equal(expected, real, m)
   end
 
+  def test_localtime_zone
+    t = with_tz("America/Los_Angeles") {
+      Time.local(2000, 1, 1)
+    }
+    z1 = t.zone
+    z2 = with_tz(tz="Asia/Singapore") {
+      t.localtime.zone
+    }
+    assert_equal(z2, z1)
+  end
+
   def test_america_los_angeles
     with_tz(tz="America/Los_Angeles") {
       assert_time_constructor(tz, "2007-03-11 03:00:00 -0700", :local, [2007,3,11,2,0,0])
diff --git a/time.c b/time.c
index 1f62f3699c..f48f0e29f3 100644
--- a/time.c
+++ b/time.c
@@ -3405,6 +3405,9 @@ time_localtime(VALUE time)
  *
  *     t.localtime("+09:00")                   #=> 2000-01-02 05:15:01 +0900
  *     t.utc?                                  #=> false
+ *
+ *  If +utc_offset+ is not given and _time_ is local time, just return
+ *  the receiver.
  */
 
 static VALUE