Issue #20327 has been updated by naruse (Yui NARUSE).
Backport changed from 3.0: REQUIRED, 3.1: REQUIRED, 3.2: REQUIRED, 3.3: REQUIRED to 3.0:
REQUIRED, 3.1: REQUIRED, 3.2: REQUIRED, 3.3: DONE
ruby_3_3 821719a505bbc628ddd80b90ae892666006eada1 merged revision(s)
d3279a0c11ca45ca85027e7eb74dc4aac52c478b.
----------------------------------------
Bug #20327: Time.new behaves differently when passing a zone as timezone object
https://bugs.ruby-lang.org/issues/20327#change-107405
* Author: davekaro (Dave Kroondyk)
* Status: Closed
* ruby -v: ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [arm64-darwin23]
* Backport: 3.0: REQUIRED, 3.1: REQUIRED, 3.2: REQUIRED, 3.3: DONE
----------------------------------------
Time.new with a timezone object for the zone argument produces incorrect utc_offset when
passing seconds as a Rational.
``` ruby
require "tzinfo"
# This correctly outputs 0 as the utc_offset
puts Time.new(2024, 1, 1, 23, 59, 59.9r, "UTC").utc_offset
# => 0
# Inspecting the time looks correct
puts Time.new(2024, 1, 1, 23, 59, 59.9r, "UTC").inspect
# => "2024-01-01 23:59:59.9 UTC"
# Using a timezone object for the zone, results are different
puts Time.new(2024, 1, 1, 23, 59, 59.9r,
TZInfo::Timezone.get("Etc/UTC")).utc_offset # => (9/10)
# Inspecting the time object reveals the odd offset
puts Time.new(2024, 1, 1, 23, 59, 59.9r,
TZInfo::Timezone.get("Etc/UTC")).inspect # => "2024-01-01 23:59:59.9
+000001"
```
--
https://bugs.ruby-lang.org/