Project

General

Profile

Actions

Bug #20327

closed

Time.new behaves differently when passing a zone as timezone object

Added by davekaro (Dave Kroondyk) 10 months ago. Updated 9 months ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [arm64-darwin23]
[ruby-core:117071]

Description

Time.new with a timezone object for the zone argument produces incorrect utc_offset when passing seconds as a Rational.

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"

Actions

Also available in: Atom PDF

Like0
Like1Like0Like0Like0