summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2021-01-12 17:00:14 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2021-01-12 17:00:14 +0900
commitb017848f8a9c907be07f51d6ae6304bff9950594 (patch)
tree7bb1bb2448ddaaff9f569b702da485cc261140df
parentf7dc4d5cda74e101fa66c1170c0b47deea09c0ee (diff)
Show seconds of utc_offset if not zero
-rw-r--r--test/ruby/test_time.rb4
-rw-r--r--time.c9
2 files changed, 12 insertions, 1 deletions
diff --git a/test/ruby/test_time.rb b/test/ruby/test_time.rb
index 3f5cb9d3f2..e49753e143 100644
--- a/test/ruby/test_time.rb
+++ b/test/ruby/test_time.rb
@@ -584,6 +584,10 @@ class TestTime < Test::Unit::TestCase
t2000 = get_t2000.localtime(9*3600) + 1/10r
assert_equal("2000-01-01 09:00:00.1 +0900", t2000.inspect)
+
+ t2000 = get_t2000
+ assert_equal("2000-01-01 09:12:00 +0912", t2000.localtime(9*3600+12*60).inspect)
+ assert_equal("2000-01-01 09:12:34 +091234", t2000.localtime(9*3600+12*60+34).inspect)
end
def assert_zone_encoding(time)
diff --git a/time.c b/time.c
index f2f5d173cb..a3952743da 100644
--- a/time.c
+++ b/time.c
@@ -4099,7 +4099,14 @@ time_inspect(VALUE time)
rb_str_cat_cstr(str, " UTC");
}
else {
- rb_str_concat(str, strftimev(" %z", time, rb_usascii_encoding()));
+ /* ?TODO: subsecond offset */
+ long off = NUM2LONG(rb_funcall(tobj->vtm.utc_offset, rb_intern("round"), 0));
+ char sign = (off < 0) ? (off = -off, '-') : '+';
+ int sec = off % 60;
+ int min = (off /= 60) % 60;
+ off /= 60;
+ rb_str_catf(str, " %c%.2d%.2d", sign, (int)off, min);
+ if (sec) rb_str_catf(str, "%.2d", sec);
}
return str;
}