对于时区缩写,DateTime.strftime与Time.strftime的输出不同

时间:2017-02-18 16:49:27

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

我觉得我在这里错过了很简单的东西。我看到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]

2 个答案:

答案 0 :(得分:1)

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

  

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

为了能够双向显示偏移量,DateTime显示数值。要检索缩写名称,应明确将DateTime对象强制转换为Time

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

答案 1 :(得分:1)

有几件事 -

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”)