如何在不加前导零或空格的情况下写出时间的小时数?

19

在一个 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文档中,我没有看到其他格式化小时的代码。 我无法使用.lstrip,因为空格位于字符串中间。 我可以使用.gsub(/ +/, " "),但我想知道是否有一种更简单,不那么繁琐的方法。

1个回答

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

使用%-l代替%l-会删除前导空格和零。

你也可以将-与其他格式代码一起使用。Ruby strftime文档甚至提到了%-m%-d,尽管它没有提到你可以在任何代码中使用-。因此,%-I将给出与%-l相同的结果。但我建议使用%-l,因为使用l而不是I表示您不想在开头添加任何东西——它写入的空格看起来更像是意外之余。

你还可以查看包括带有-和类似语法的_0在内的Ruby 1.8 strftime格式代码的详尽列表。它说Mac OS X上的Ruby 1.8不支持这些扩展语法,但别担心:它们在我的OS X机器上的Ruby 1.9中有效。


希望每个解决方案都像这样简单明了。+1 - flarn2006
这个解决方案可能只适用于Unix系统,而不适用于Windows。“Python strftime - date without leading 0?”的答案是关于Python中相同任务的,它说%-只在Unix上工作。为什么“%-d”或“%-e”会去掉前导空格或零?说不兼容是因为Python调用底层操作系统的strftime,这可能具有特定于平台的扩展。我不知道Ruby的strftime是否相同。 - Rory O'Kane

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接