我遇到了Ruby 1.8.7 strftime的问题,其中%z在我将时间转换为UTC后返回本地时间。
我正在做以下事情:
>> t = Time.now
=> Mon Dec 19 15:20:16 -0800 2011
>> t.strftime("%z")
=> "-0800"
>> t = Time.now.utc
=> Mon Dec 19 23:20:28 UTC 2011
>> t.strftime("%z")
=> "-0800"
即使我将时间更改为UTC,格式化的时区也会默认为我的本地PST -0800。
这是一个已知问题吗?有办法解决吗?
答案 0 :(得分:5)
请注意,fine 1.8.7 manual未提及%z
:
...
%w - Day of the week (Sunday is 0, 0..6)
%x - Preferred representation for the date alone, no time
%X - Preferred representation for the time alone, no date
%y - Year without a century (00..99)
%Y - Year with century
%Z - Time zone name
%% - Literal ``%'' character
但1.9.3 version确实支持%z
:
Time zone:
%z - Time zone as hour and minute offset from UTC (e.g. +0900)
%:z - hour and minute offset from UTC with a colon (e.g. +09:00)
%::z - hour, minute and second offset from UTC (e.g. +09:00:00)
%Z - Time zone abbreviation name
%z
产生任何东西的事实似乎是一个没有记录且可能是偶然的实现细节。
您可以在1.8.7和1.9.3中使用%Z
;例如,您可以在1.8.7中获得这些结果:
>> t = Time.now
=> Mon Dec 19 16:46:06 -0800 2011
>> t.zone
=> "PST"
>> t.strftime('%z %Z')
=> "-0800 PST"
>> t = Time.now.utc
=> Tue Dec 20 00:46:27 UTC 2011
>> t.zone
=> "UTC"
>> t.strftime('%z %Z')
=> "-0800 UTC"
这将为您提供UTC,PST,EDT和类似常用缩写的时区。如果您想要偏移量,则应在1.9.3和1.8.7中使用gmt_offset
:
>> Time.now.gmt_offset
=> -28800
>> Time.now.utc.gmt_offset
=> 0
请注意gmt_offset
为您提供以秒为单位的偏移量。
答案 1 :(得分:-3)
你的问题。
ruby-1.9.2-p290 :004 > Time.now.strftime("%z")
=> "-0500"
ruby-1.9.2-p290 :005 > Time.now.utc.strftime("%z")
=> "+0000"