【问题标题】:strftime(%Z) returns wrong resultstrftime(%Z) 返回错误结果
【发布时间】:2019-01-02 16:17:51
【问题描述】:

我有这个日期

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.7rails 4.2.7

更新

如果我这样做

start_in_time_zone = date.in_time_zone("Madrid")

它返回

"CEST"

更新 2

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

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

【问题讨论】:

  • 旁注:在 Ruby 中的任何日期/时间类上都没有定义 in_time_zone 方法。
  • 我已经更新了我的问题。日期是 ActiveSupport::TimeWithZone 类
  • 你可能应该更新标签,ruby 中没有这样的类ActiveSupport::TimeWithZone
  • 对。现在就完成了。
  • 你的操作系统是什么?

标签: ruby-on-rails ruby timezone


【解决方案1】:

遗憾的是,在 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.tzinfoActiveSupport::TimeWithZone 对象上检索全名和其他信息。 'FJ' 代码被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>]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-05
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    相关资源
    最近更新 更多