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

时间:2012-06-28 18:18:44

标签: ruby time ruby-1.9 strftime time-format

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

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

1 个答案:

答案 0 :(得分:37)

Time.now.strftime '%a %-l:%M %p' #=> "Thu 1:51 PM"

%-l代替%l-剥离前导空格和零。

您也可以将-与其他格式代码一起使用。 Ruby strftime文档甚至提到了%-m%-d,但它没有提及您可以将-与任何代码一起使用。因此,%-I会得到与%-l相同的结果。但我建议使用%-l,因为使用l代替I表示我一开始并不想要任何内容​​ - 它所写的空间看起来更加偶然。

您还可以看到an exhaustive list of Ruby 1.8 strftime format codes,包括-和类似语法_0的{​​{3}}。它说Mac OS X上的Ruby 1.8不支持这些扩展语法,但不要担心:它们在我的OS X机器上使用Ruby 1.9。