在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,更简单的方法。
答案 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。