strftime%Z在Time和DateTime上的行为有所不同

时间:2017-02-23 03:15:34

标签: ruby-on-rails

>> Time.now.strftime("%Z")
=> "CST"
>> DateTime.now.strftime("%Z")
=> "+08:00"
>> DateTime.new(2017, 2, 1, 17, 30, 0, "PST").strftime("%Z")
=> "-08:00"

所以我想打印出时区名称,以便我到达strftime。但是,如果我给它一个DateTime,它的行为会有所不同。为什么会这样?这是否意味着我无法使用DateTime.new来初始化特定时区的任意时间?

2 个答案:

答案 0 :(得分:0)

您可以使用DateTime设置in_time_zone的时区:

DateTime.now.in_time_zone("Pacific Time (US & Canada)").strftime("%Z")
如果指定,

Time将自动包含时区。

答案 1 :(得分:0)

我遇到了同样的问题。这似乎是原因:

  • Time知道它的时区(我们可以从中得出偏移量)
  • DateTime只知道它与UTC的偏差(可能超过 一个时区,因为不遵守夏令时)

例如,目前凤凰城,亚利桑那州和加利福尼亚州旧金山都与UTC(-0700)的偏差相同,但时区不同(分别为MST和PDT)。