From: merch-redmine@... Date: 2019-10-31T19:03:04+00:00 Subject: [ruby-core:95616] [Ruby master Bug#16286] DateTime.parse timezone errors Issue #16286 has been updated by jeremyevans0 (Jeremy Evans). shyouhei (Shyouhei Urabe) wrote: > Curious where were those abbreviation from. According to `git log -G`, It was introduced in this commit https://github.com/ruby/ruby/commit/dc9cd6a8c22ad04baa7498fd0cbc5d519ed73be0 but no description came with it. > > Maybe it's better to follow authoritative information such as tzdata. I agree. Not having much experience with the tz database, I'm not sure how to easily get abbreviation info out of it. The tzinfo gem doesn't appear to expose a list of all abbreviations, though recent versions do allow getting current abbreviations for particular timezones. It is hard to use that feature to add missing timezones, though. I did find an alternative source for timezone abbreviations that was easier to deal with: https://www.timeanddate.com/time/zones/. Not sure how authoritative it is, but it seems reasonable. It does include AEST, AEDT, and EASST. For backwards compatibility, we shouldn't change EAST. I've submitted a pull request to add new unambiguous time zones listed on that site: https://github.com/ruby/date/pull/16 ---------------------------------------- Bug #16286: DateTime.parse timezone errors https://bugs.ruby-lang.org/issues/16286#change-82407 * Author: matt17r (Matthew LS) * Status: Open * Priority: Normal * Assignee: * Target version: * ruby -v: ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-darwin19] * Backport: 2.5: UNKNOWN, 2.6: UNKNOWN ---------------------------------------- Trying to parse a DateTime using Australian time zone abbreviations doesn't work: ``` >> DateTime.parse('2019-10-31 10:49:52.36400 AEST') => # # offset is +00:00 not +10:00 ^^^^^^ ``` As per [this comment on a Rails issue](https://github.com/rails/rails/issues/36972#issuecomment-526260754), timezones are listed in [ext/date/zonetab.list](https://github.com/ruby/ruby/blob/master/ext/date/zonetab.list). Should these abbreviations be correct or are they deprecated? Steps to reproduce: ``` >> require 'date' => true >> DateTime.parse('2019-10-31 10:49:52.36400 AEST').zone => +00:00 # expected +10:00 >> DateTime.parse('2019-10-31 10:49:52.36400 AEDT').zone => +00:00 # expected +11:00 >> DateTime.parse('2019-10-31 10:49:52.36400 EAST').zone => +10:00 # expected -06:00 >> DateTime.parse('2019-10-31 10:49:52.36400 EASST').zone => +00:00 # expected -05:00 ``` Additional info: [ext/date/zonetab.list](https://github.com/ruby/ruby/blob/master/ext/date/zonetab.list) lists "EAST" with an offset of +10. *EAST* is the abbreviation for Easter Island, not for Australia Eastern Standard Time. References: 1. the most recent data from [IANA](https://data.iana.org/time-zones/releases/?C=M;O=D) ([2019c at time of writing](https://data.iana.org/time-zones/releases/tzdata2019c.tar.gz)) refers to the timezones as *AEST* (or *AEDT* for DST) 2. the [Australian government](https://www.australia.gov.au/about-australia/facts-and-figures/time-zones-and-daylight-saving) uses *AEST* (or *AEDT* for DST) 3. *EAST* isn't referenced by IANA but [there](https://www.worldtimeserver.com/time-zones/east/) [are](https://24timezones.com/time-zone/east) [several](https://time.is/EAST) [sources](https://www.timeanddate.com/time/zones/east) that use *EAST* for Easter Island, off the coast of Chile (-6 rather than +10). ---Files-------------------------------- DateTime_parse_AEST_timezone_issue.rb (479 Bytes) -- https://bugs.ruby-lang.org/ Unsubscribe: