如何在没有前导零或前导空格的情况下编写时间小时?

Ror*_*ane 17 ruby time strftime time-format ruby-1.9

在Ruby 1.9程序中,我想格式化当前时间Thu 1:51 PM.我应该在一天中的某个小时使用什么格式的代码(1在本例中)?

Time.now.strftime '%a %I:%M %p' #=> "Thu 01:51 PM"
Time.now.strftime '%a %l:%M %p' #=> "Thu  1:51 PM"
Run Code Online (Sandbox Code Playgroud)

%I有一个前导零(01).%l有一个领先的空间( 1).我没有在strftime文档中看到小时的任何其他格式代码.我无法使用,.lstrip因为空间位于字符串的中间.我可以使用.gsub(/ +/, " "),但我想知道是否有一个更少的hacky,更简单的方式.

Ror*_*ane 39

Time.now.strftime '%a %-l:%M %p' #=> "Thu 1:51 PM"
Run Code Online (Sandbox Code Playgroud)

%-l而不是%l.该-带前导空格和零.

您也可以使用-其他格式代码.红宝石的strftime文档甚至提到%-m%-d,虽然它没有提到你可以使用-任何代码.因此,%-I会给出相同的结果%-l.但我建议%-l,因为使用l而不是I向我表明你一开始并不想要任何东西 - 它所写的空间看起来更加偶然.

您还可以看到Ruby 1.8 strftime格式代码的详尽列表,包括具有-类似语法_代码的代码0.它说Mac OS X上的Ruby 1.8不支持这些扩展语法,但不要担心:它们在我的OS X机器上使用Ruby 1.9.