Note that a penalty of 1.8.7 does not mention %z manually :
... %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
but version 1.9.3 has documentary support for %z :
Time zone: %z - Time zone as hour and minute offset from UTC (eg +0900) %:z - hour and minute offset from UTC with a colon (eg +09:00) %::z - hour, minute and second offset from UTC (eg +09:00:00) %Z - Time zone abbreviation name
The fact that %z creates anything at all seems to be an undocumented and possibly random implementation.
You can use %z in 1.8.7 and 1.9.3; for example, you get these results in 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"
This will give you a time zone like UTC, PST, EDT and similar common abbreviations. If you want an offset, you should use gmt_offset in 1.9.3 and 1.8.7 :
>> Time.now.gmt_offset => -28800 >> Time.now.utc.gmt_offset => 0
Note that gmt_offset gives you the offset in seconds.
source share