strftime(%Z)返回错误结果

时间:2018-07-25 18:47:51

标签: ruby-on-rails ruby timezone

我有这个约会

Locator.CurrentMutable.Register(() => new MyView(), typeof(IViewFor<MyViewModel>));
            var ViewModel = (MyViewModel)Locator.CurrentMutable.GetService(typeof(MyViewModel));

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

然后,我需要获取“斐济”时区的时间

ActiveSupport::TimeWithZone

这将返回start_in_time_zone = date.in_time_zone("Fiji")

然后,我需要用时区名称显示日期,所以

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

它应该返回time_zone_abbr = start_in_time_zone.strftime("%Z")

但返回"FJT"

知道为什么吗?

我正在使用"+12"ruby 2.3.7

更新

如果我愿意

rails 4.2.7

它返回

start_in_time_zone = date.in_time_zone("Madrid")

更新2

我试图通过设置不同的时间来查看问题出在哪里。

"CEST"

1 个答案:

答案 0 :(得分:2)

可悲的是,在Rails使用的时区数据中似乎没有为“斐济”分配“ FJT”的缩写。另外,对于这些缩写的支持在太平洋时区似乎是零星的。

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偏移显示为后备。如果有帮助,请记住可以使用.time_zone.tzinfo对象上的ActiveSupport::TimeWithZone检索全名和其他信息。 TZInfo::Country可以识别“ FJ”代码。

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>]