jedi
jedi

Reputation: 2198

strftime(%Z) returns wrong result

I have this date

date = Mon, 15 Aug 2016 13:00:00 UTC +00:00

which is ActiveSupport::TimeWithZone class

Then, I need to get the time in time zone "Fiji"

start_in_time_zone = date.in_time_zone("Fiji")

This returns Tue, 16 Aug 2016 01:00:00 +12 +12:00

Then, I need to present the date with the name of the time zone, so

time_zone_abbr = start_in_time_zone.strftime("%Z")

It should return "FJT"

but returns "+12"

Any idea why?

I am using ruby 2.3.7 and rails 4.2.7

UPDATE

If I do

start_in_time_zone = date.in_time_zone("Madrid")

it returns

"CEST"

UPDATE 2

I have tried to see where the problem is by setting different time.

date=Time.utc(2018, 07, 25, 20, 30, 45)
date.class #=> Time
date.in_time_zone("Madrid") #=> Wed, 25 Jul 2018 22:30:45 CEST +02:00
date.in_time_zone("Fiji") #=> Thu, 26 Jul 2018 08:30:45 +12 +12:00
date.in_time_zone("EST") #=> Wed, 25 Jul 2018 15:30:45 EST -05:00

Upvotes: 1

Views: 380

Answers (1)

Bartosz Pietraszko
Bartosz Pietraszko

Reputation: 1407

Sadly, it seems there is no 'FJT' abbreviation assigned to 'Fiji' in timezone data used by Rails. Also, support for those abbreviations seems patchy regarding Pacific timezones.

irb(main):002:0> DateTime.now.in_time_zone('Samoa').strftime('%Z')
=> "+13"
irb(main):003:0> DateTime.now.in_time_zone('Midway Island').strftime('%Z')
=> "SST"
irb(main):004:0> DateTime.now.in_time_zone('Samoa').strftime('%Z')
=> "+13"
irb(main):005:0> DateTime.now.in_time_zone('Tokelau Is.').strftime('%Z')
=> "+13"
irb(main):006:0> DateTime.now.in_time_zone('Wellington').strftime('%Z')
=> "NZST"

UTC offset is displayed as fallback. If it's any help, remember that full name and additional information can be retrieved with .time_zone.tzinfo on ActiveSupport::TimeWithZone objects. 'FJ' code is recognized by TZInfo::Country.

irb(main):056:0> TZInfo::Country.get('FJ')
=> #<TZInfo::Country: FJ>
irb(main):057:0> TZInfo::Country.get('FJ').zone_info
=> [#<TZInfo::CountryTimezone: Pacific/Fiji>]

Upvotes: 2

Related Questions