diff --git a/lib/et-orbi/time.rb b/lib/et-orbi/time.rb index cf531e9..8e3a047 100644 --- a/lib/et-orbi/time.rb +++ b/lib/et-orbi/time.rb @@ -201,7 +201,7 @@ def to_debug_s uo = self.utc_offset uos = uo < 0 ? '-' : '+' uo = uo.abs - uoh, uom = [ uo / 3600, uo % 3600 ] + uoh, uom = [ uo / 3600, (uo % 3600) / 60 ] [ 'ot', diff --git a/lib/et-orbi/zone.rb b/lib/et-orbi/zone.rb index 4eb868b..5faf966 100644 --- a/lib/et-orbi/zone.rb +++ b/lib/et-orbi/zone.rb @@ -43,7 +43,7 @@ def get_offset_tzone(str) hr = nil if hr.abs > 11 hr = nil if mn > 59 - mn = -mn if hr && hr < 0 + mn = -mn if m[1].start_with?('-') hr ? custom_tzs[str] = create_offset_tzone(hr * 3600 + mn * 60, str) : @@ -85,7 +85,7 @@ def to_offset(n) i = n.to_i sn = i < 0 ? '-' : '+'; i = i.abs - hr = i / 3600; mn = i % 3600; sc = i % 60 + hr = i / 3600; mn = (i % 3600) / 60; sc = i % 60 sc > 0 ? '%s%02d:%02d:%02d' % [ sn, hr, mn, sc ] : diff --git a/test/module_test.rb b/test/module_test.rb index 0e07d30..1855e9e 100644 --- a/test/module_test.rb +++ b/test/module_test.rb @@ -447,6 +447,17 @@ end end + test 'handles fractional-hour offsets' do + + assert EtOrbi.get_tzone(19_800).name, '+05:30' + assert EtOrbi.get_tzone(-1_800).name, '-00:30' + assert EtOrbi.get_tzone('-00:30').name, '-00:30' + + assert( + EtOrbi::EoTime.new(0, 19_800).to_debug_s, + 'ot 1970-01-01 05:30:00 +05:30 dst:false') + end + # test 'returns a timezone for well-known abbreviations' do # # assert gtz('JST'), 'Japan'