Ruby on rails 是否存在Ruby 1.8.7 time.strftime%z错误?

Ruby on rails 是否存在Ruby 1.8.7 time.strftime%z错误?,ruby-on-rails,ruby,timezone,ruby-1.8,Ruby On Rails,Ruby,Timezone,Ruby 1.8,我在Ruby 1.8.7 strftime中遇到问题,在我将时间转换为UTC后,%z返回本地时间 我正在做以下工作: >> 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") =>

我在Ruby 1.8.7 strftime中遇到问题,在我将时间转换为UTC后,%z返回本地时间

我正在做以下工作:

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

这是一个已知的问题吗?有办法绕过它吗

你的问题

ruby-1.9.2-p290 :004 > Time.now.strftime("%z")
 => "-0500" 
ruby-1.9.2-p290 :005 > Time.now.utc.strftime("%z")
 => "+0000" 
请注意,未提及
%z

。。。
%w-一周中的某一天(星期日为0,0..6)
%x-仅日期的首选表示法,无时间
%X-仅时间的首选表示,无日期
%y-无世纪年(00..99)
%年与世纪
%Z-时区名称
%%-文字“`%''字符
但是,确实有文档支持
%z

时区:
%z-时区,以UTC的小时和分钟偏移量表示(例如+0900)
%:z-从UTC到带冒号的小时和分钟偏移量(例如+09:00)
%::z-UTC的小时、分钟和秒偏移量(例如+09:00:00)
%Z-时区缩写名称
%z
产生任何东西的事实似乎都是未记录的,可能是偶然的实现细节

您可以在1.8.7和1.9.3中使用
%Z
;例如,您可以在1.8.7中获得以下结果:

>t=Time.now
=>2011年12月19日星期一16:46:06-0800
>>t区
=>“PST”
>>t.strftime(“%z%z”)
=>“-0800太平洋标准时”
>>t=Time.now.utc
=>2011年12月20日星期二00:46:27 UTC
>>t区
=>“UTC”
>>t.strftime(“%z%z”)
=>“-0800 UTC”
这将为您提供UTC、PST、EDT等时区以及类似的常用缩写。如果需要偏移量,应在和中使用
gmt\u offset

>Time.now.gmt\u偏移量
=> -28800
>>Time.now.utc.gmt\u偏移量
=> 0

请注意,
gmt\u offset
以秒为单位提供偏移量。

OP的ruby版本是1.8.7,而不是1.9.2.0。感谢您的快速回复!现在,程序可以处理偏移量,因此我们不会对其进行太多的打乱,但最好知道偏移量本身不是库的一部分。使用gmt_offset在1.8中快速实现“%z”:
time=time.now;“{time.gmt_offset<0?”-”:“+”}%02d%02d”%(time.gmt_offset/60).abs.divmod(60)