【问题标题】:Different output for DateTime.strftime vs Time.strftime for timezone abbreviations时区缩写的 DateTime.strftime 与 Time.strftime 的不同输出
【发布时间】:2017-07-08 03:48:33
【问题描述】:

我觉得我在这里遗漏了一些非常简单的东西。我读了APIDock 我期待%Z 返回一个缩写的时区(例如PST)。它为Time 对象而不是DateTime 执行此操作。

我错过了什么?

irb(main):008:0> Time.now.strftime("%Z")
=> "PST"
irb(main):009:0> DateTime.now.strftime("%Z")
=> "-08:00"

ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin15]

【问题讨论】:

    标签: ruby-on-rails ruby datetime time format


    【解决方案1】:

    DateTime#strftime 上的文档有点不清楚:

    %Z — 时区缩写名称或类似信息。

    为了可以双向显示偏移量,DateTime 显示数值。要检索缩写名称,应将DateTime 对象显式转换为Time

    ▶ DateTime.now.to_time.strftime("%Z")
    #⇒ "CET"
    

    【讨论】:

    • 谢谢 - 我不确定这是文档问题还是功能问题。我开了一张票:bugs.ruby-lang.org/issues/13231
    • 老实说:我很确定这是故意这样做的,可以显示两种方式的偏移量,而无需添加额外的%-mapper。
    【解决方案2】:

    有几件事-

    DateTime.now

    给你一个 DateTime 类的对象。另外我已经通过DateTime class Doc 并在终端中检查了 %Z ,它不起作用。

    正如 mudasobwa 所说,通过使用 to_time 方法,您将 DateTime 对象转换为 Time 类对象。

    所以DateTime.now.to_timeTime.now 都给你同样的东西。

    结论 - 我会建议你使用

    Time.now.strftime("%Z")

    而不是

    DateTime.now.to_time.strftime("%Z")

    【讨论】:

      猜你喜欢
      • 2016-04-27
      • 1970-01-01
      • 2012-01-07
      • 2015-12-31
      • 2019-08-02
      • 1970-01-01
      • 1970-01-01
      • 2018-01-30
      • 1970-01-01
      相关资源
      最近更新 更多