2015-02-02 1 views
2

У меня есть следующий объект Time:STRFTIME Руби не отображает смещение часового пояса с «% Z»

[8] pry(#<#<Class:0x007f928f12f560>>)> display_num 
=> 2015-02-19 09:00:00 -0600 
[9] pry(#<#<Class:0x007f928f12f560>>)> display_num.is_a?(Time) 
=> true 
[10] pry(#<#<Class:0x007f928f12f560>>)> display_num.is_a?(DateTime) 
=> false 
[11] pry(#<#<Class:0x007f928f12f560>>)> display_num.strftime("%l:%M%P %Z") 
=> " 9:00am " 
[12] pry(#<#<Class:0x007f928f12f560>>)> display_num.strftime("%l:%M%P %z") 
=> " 9:00am -0600" 

Я полностью тупик, как это:

[16] pry(#<#<Class:0x007f928f12f560>>)> Time.new 
=> 2015-02-02 14:09:13 -0800 
[17] pry(#<#<Class:0x007f928f12f560>>)> t = Time.new 
=> 2015-02-02 14:09:25 -0800 
[18] pry(#<#<Class:0x007f928f12f560>>)> t.strftime("%l:%M%P %Z") 
=> " 2:09pm PST" 

работает просто отлично.

Что происходит в этом блоке, чтобы предотвратить отображение часового пояса в человекообразном формате?

ответ

5

Директива формата %Z запрашивает символический часовой пояс (название или аббревиатура); %z - это смещение. Хотя вы всегда знаете смещение, вы можете не знать символическое имя часового пояса.

Я подозреваю, что это то, что происходит с display_time. Он был инициализирован смещением, поэтому у него нет символьного названия часового пояса.

Вы также не можете надежно получить имя из смещения; например, -0400 может быть атлантическим стандартным временем или восточным дневным светом. Большинство смещений будут иметь более одного варианта для того, в каком часовом поясе они находятся, и большинство часовых поясов имеют более одного имени в любом случае.

+0

Вот и все, я инициализирую со смещением. Doh! –

Смежные вопросы