summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--lib/time.rb17
-rw-r--r--test/test_time.rb8
3 files changed, 27 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index aef5ff6a31..0e43e1df72 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Tue May 6 18:48:50 2014 Tanaka Akira <akr@fsij.org>
+
+ * lib/time.rb (Time.make_time): Adjust the time zone of "now".
+
Tue May 6 18:33:12 2014 Tadayoshi Funaba <tadf@dotrb.org>
* io.c (io_{read,write}_nonblock): use rb_get_kwargs instead of
diff --git a/lib/time.rb b/lib/time.rb
index 31a93f932f..3728fef59c 100644
--- a/lib/time.rb
+++ b/lib/time.rb
@@ -251,8 +251,19 @@ class Time
raise ArgumentError, "no time information in #{date.inspect}"
end
+ off_year = year || now.year
+ off = nil
+ off = zone_offset(zone, off_year) if zone
+
+ if off
+ now = now.getlocal(off) if now.utc_offset != off
+ else
+ now = now.getlocal
+ end
+
usec = nil
usec = sec_fraction * 1000000 if sec_fraction
+
if now
begin
break if year; year = now.year
@@ -273,8 +284,10 @@ class Time
sec ||= 0
usec ||= 0
- off = nil
- off = zone_offset(zone, year) if zone
+ if year != off_year
+ off = nil
+ off = zone_offset(zone, year) if zone
+ end
if off
year, mon, day, hour, min, sec =
diff --git a/test/test_time.rb b/test/test_time.rb
index e91ce7e73c..c516d29227 100644
--- a/test/test_time.rb
+++ b/test/test_time.rb
@@ -238,6 +238,14 @@ class TestTimeExtension < Test::Unit::TestCase # :nodoc:
assert_raise(ArgumentError) { Time.parse("foo", now) }
end
+ def test_completion_with_different_timezone
+ now = Time.new(2001,2,3,0,0,0,"+09:00") # 2001-02-02 15:00:00 UTC
+ t = Time.parse("10:20:30 GMT", now)
+ assert_equal(Time.utc(2001,2,2,10,20,30), t)
+ assert_equal(false, t.utc?)
+ assert_equal(0, t.utc_offset)
+ end
+
def test_invalid
# They were actually used in some web sites.
assert_raise(ArgumentError) { Time.httpdate("1 Dec 2001 10:23:57 GMT") }