Ruby strftime:月没有前导零吗?


89

Ruby的strftime月份格式是否没有前导零?

我发现 %e获得一天时没有前导零,但是没有运气。

最终想要一个日期格式如下: 9/1/2010


2
是1月9日还是10月1日?
Telent

@telent的,但是客户会解释它的意思:)
Factor Mystic

11
我很确定这不是10月1日.....
brad

Answers:


138

某些版本的strftimedo允许带减号的前缀来格式化前导零,例如:

strftime "%-d/%-m/%y"

但是,这取决于strftime您的系统。因此,为了保持一致,我将改为执行以下操作:

dt = Time.local(2010, 'Sep', 1)
printf "%d/%d/%d", dt.day, dt.month, dt.year

似乎减号在Ruby 1.8.7上可以正常工作,谢谢!
罗布

2
@Rob:是的,只要您的系统strftime支持它,它就可以工作(例如,在Mac OSX Snow Leopard上运行的1.8.7上,它不起作用)。
draegtun

嗯,是的,我应该澄清一下,在ubuntu linux上是1.8.7
Rob

为我工作。在Ubuntu上为1.9.2p180。
B

适用于我在FreeBSD 9上的1.9.3版本
user569825 2012年

39

这是我要删除的格式列表。这是来自2.1.3的文档。根据这个你会想要%-m

Date (Year, Month, Day):
  %Y - Year with century (can be negative, 4 digits at least)
          -0001, 0000, 1995, 2009, 14292, etc.
  %C - year / 100 (rounded down such as 20 in 2009)
  %y - year % 100 (00..99)

  %m - Month of the year, zero-padded (01..12)
          %_m  blank-padded ( 1..12)
          %-m  no-padded (1..12)
  %B - The full month name (``January'')
          %^B  uppercased (``JANUARY'')
  %b - The abbreviated month name (``Jan'')
          %^b  uppercased (``JAN'')
  %h - Equivalent to %b

  %d - Day of the month, zero-padded (01..31)
          %-d  no-padded (1..31)
  %e - Day of the month, blank-padded ( 1..31)

  %j - Day of the year (001..366)

Time (Hour, Minute, Second, Subsecond):
  %H - Hour of the day, 24-hour clock, zero-padded (00..23)
  %k - Hour of the day, 24-hour clock, blank-padded ( 0..23)
  %I - Hour of the day, 12-hour clock, zero-padded (01..12)
  %l - Hour of the day, 12-hour clock, blank-padded ( 1..12)
  %P - Meridian indicator, lowercase (``am'' or ``pm'')
  %p - Meridian indicator, uppercase (``AM'' or ``PM'')

  %M - Minute of the hour (00..59)

  %S - Second of the minute (00..60)

  %L - Millisecond of the second (000..999)
       The digits under millisecond are truncated to not produce 1000.
  %N - Fractional seconds digits, default is 9 digits (nanosecond)
          %3N  millisecond (3 digits)
          %6N  microsecond (6 digits)
          %9N  nanosecond (9 digits)
          %12N picosecond (12 digits)
          %15N femtosecond (15 digits)
          %18N attosecond (18 digits)
          %21N zeptosecond (21 digits)
          %24N yoctosecond (24 digits)
       The digits under the specified length are truncated to avoid
       carry up.

Time zone:
  %z - Time zone as hour and minute offset from UTC (e.g. +0900)
          %:z - hour and minute offset from UTC with a colon (e.g. +09:00)
          %::z - hour, minute and second offset from UTC (e.g. +09:00:00)
  %Z - Abbreviated time zone name or similar information.

Weekday:
  %A - The full weekday name (``Sunday'')
          %^A  uppercased (``SUNDAY'')
  %a - The abbreviated name (``Sun'')
          %^a  uppercased (``SUN'')
  %u - Day of the week (Monday is 1, 1..7)
  %w - Day of the week (Sunday is 0, 0..6)

ISO 8601 week-based year and week number:
The first week of YYYY starts with a Monday and includes YYYY-01-04.
The days in the year before the first week are in the last week of
the previous year.
  %G - The week-based year
  %g - The last 2 digits of the week-based year (00..99)
  %V - Week number of the week-based year (01..53)

Week number:
The first week of YYYY that starts with a Sunday or Monday (according to %U
or %W). The days in the year before the first week are in week 0.
  %U - Week number of the year. The week starts with Sunday. (00..53)
  %W - Week number of the year. The week starts with Monday. (00..53)

Seconds since the Epoch:
  %s - Number of seconds since 1970-01-01 00:00:00 UTC.

Literal string:
  %n - Newline character (\n)
  %t - Tab character (\t)
  %% - Literal ``%'' character

Combination:
  %c - date and time (%a %b %e %T %Y)
  %D - Date (%m/%d/%y)
  %F - The ISO 8601 date format (%Y-%m-%d)
  %v - VMS date (%e-%^b-%4Y)
  %x - Same as %D
  %X - Same as %T
  %r - 12-hour time (%I:%M:%S %p)
  %R - 24-hour time (%H:%M)
  %T - 24-hour time (%H:%M:%S)

14年10月24日更新至最新的2.1.3文档


7
我正在寻找如何获得没有前导零的月份...而不是一天。
Shpigford

2
为什么每个人都对这篇文章投反对票?我本以为拥有这个strftime助手列表会很有用!
罗布·卡梅隆

4
我想人们会否决它,因为它不能回答问题。列表本身非常有用,但是这些选项都不能阻止OP要求的月份的前导“ 0”。
2011年

1
+1尽管这个问题不能回答最初的问题,但对于使用谷歌搜索类似但并非完全是OP的其他人来说,它还是有用的。
大卫·奥尼尔

1
%e提供了一个前导空格(即“ 2012年1月1日”),这是不希望的,并且不一定是OP想要的。
布拉德(Brad)2012年

8

文档显示了许多用于配置数字格式的不同选项。除了%-d格式外,您还可以使用以下标志代替“-”:

Flags:
  -  don't pad a numerical output.
  _  use spaces for padding.
  0  use zeros for padding.
  ^  upcase the result string.
  #  change case.
  :  use colons for %z.

7

我有一个类似的问题,并通过转换strftime("%m")为整数来解决。

例如:

strftime("%m")+0 give the current month as integer 'without leading zero'

简单,虽然不优雅。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.