Is there a Ruby 1.8.7 time.strftime% z error?

I have a problem with Ruby 1.8.7 strftime where% z returns local time after I convert the time to UTC.

I do the following:

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

Even after I change the time to UTC, the formatted time zone becomes default for my local PST -0800.

Is this a known issue? Is there any way around this?

+4
source share
2 answers

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.

+5
source

Your problem.

 ruby-1.9.2-p290 :004 > Time.now.strftime("%z") => "-0500" ruby-1.9.2-p290 :005 > Time.now.utc.strftime("%z") => "+0000" 
-3
source

Source: https://habr.com/ru/post/895377/


All Articles