From: zverok.offline@... Date: 2019-07-05T09:00:38+00:00 Subject: [ruby-core:93557] [Ruby master Bug#15988] Time#dst? vs "real" timezones Issue #15988 has been reported by zverok (Victor Shepelev). ---------------------------------------- Bug #15988: Time#dst? vs "real" timezones https://bugs.ruby-lang.org/issues/15988 * Author: zverok (Victor Shepelev) * Status: Open * Priority: Normal * Assignee: * Target version: * ruby -v: 2.6.3 * Backport: 2.4: UNKNOWN, 2.5: UNKNOWN, 2.6: UNKNOWN ---------------------------------------- My current timezone is Europe/Kiev. With default zone (how it was previously): ```ruby summer = Time.new(2019, 6, 1, 14, 30, 12) # => 2019-06-01 14:30:12 +0300 summer.zone # => "EEST" summer.dst? # => true winter = Time.new(2019, 12, 1, 14, 30, 12) # => 2019-12-01 14:30:12 +0200 winter.zone # => "EET" winter.dst? # => false ``` (Note it is correctly `true` in summer and `false` in winter.) With "real" timezone object ```ruby require 'tzinfo' z = TZInfo::Timezone.get('Europe/Kiev') # => # summer = Time.new(2019, 6, 1, 14, 30, 12, z) # => 2019-06-01 14:30:12 +0300 summer.zone # => # summer.dst? # => true winter = Time.new(2019, 12, 1, 14, 30, 12, z) # => 2019-12-01 14:30:12 +0200 -- offset is correct winter.zone # => # winter.dst? # => true -- this is wrong! ``` Note that offsets are calculated correctly (+3 in summer, +2 in winter), but `dst?` is always `true`. TZInfo itself calculates DST properly: ```ruby z.dst?(summer) # => true z.dst?(winter) # => false ``` Seems like a serious bug to me (or at least very hard to explain behavior). PS: With arithmetics, everything works correctly: ```ruby six_months = 6 * 30 * 24 * 60 * 60 summer + six_months # => 2019-11-28 13:30:12 +0200 (summer + six_months).dst? # => false -- that is correct ``` -- https://bugs.ruby-lang.org/ Unsubscribe: