From 9ef66ce3fcfee06d628b611dbc22026d7cc72d0e Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Fri, 15 Jan 2021 17:19:18 +0900 Subject: [PATCH] strftime.c: support unknown offset UTC in RFC 3339 [Feature #17544] In RFC 3339, -00:00 is used for the time in UTC is known, but the offset to local time is unknown. Support that representation by `-` flag for `z`. --- strftime.c | 2 +- test/ruby/test_time.rb | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/strftime.c b/strftime.c index f4180fdb9e..88cdb2198c 100644 --- a/strftime.c +++ b/strftime.c @@ -547,7 +547,7 @@ rb_strftime_with_timespec(VALUE ftime, const char *format, size_t format_len, else { off = NUM2LONG(rb_funcall(vtm->utc_offset, rb_intern("round"), 0)); } - if (off < 0) { + if (off < 0 || (off == 0 && (flags & BIT_OF(LEFT)))) { off = -off; sign = -1; } diff --git a/test/ruby/test_time.rb b/test/ruby/test_time.rb index b264e7f73c..4e8689bbda 100644 --- a/test/ruby/test_time.rb +++ b/test/ruby/test_time.rb @@ -920,6 +920,11 @@ class TestTime < Test::Unit::TestCase assert_equal("+09:00", t.strftime("%:z")) assert_equal("+09:00:01", t.strftime("%::z")) assert_equal("+09:00:01", t.strftime("%:::z")) + + assert_equal("+0000", t2000.strftime("%z")) + assert_equal("-0000", t2000.strftime("%-z")) + assert_equal("-00:00", t2000.strftime("%-:z")) + assert_equal("-00:00:00", t2000.strftime("%-::z")) end def test_strftime_padding