Ruby strftime : 앞에 0이없는 월?


89

Ruby strftime에는 앞에 0이없는 월 형식이 있나요?

나는 %e앞에 0이없는 날을 찾았 지만 그 달에 운이 없었습니다.

궁극적으로 다음과 같은 형식의 날짜를 원합니다. 9/1/2010


2
1 월 9 일인가요, 10 월 1 일인가요?
2016 년

@telent 그러나 클라이언트가 그것을 해석합니다 :)
Factor Mystic

11
나는 확실히 그것을 ..... 10 월 1 일이 아니다 꽤 있어요
브래드

답변:


139

strftimedo의 일부 버전에서는 마이너스 접두사 를 사용하여 선행 0을 형식화 할 수 있습니다 . 예를 들면 다음과 같습니다.

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에서 잘 작동하는 것 같습니다. 감사합니다!
Rob

2
@Rob : 예, 시스템이 strftime지원하는 한 작동 합니다 (예 : Mac OSX Snow Leopard에서 실행되는 1.8.7에서는 작동하지 않음).
draegtun

아, 그렇습니다. 우분투 리눅스에서 1.8.7이라는 것을 분명히해야했습니다
Rob

나를 위해 일했습니다. Ubuntu에서 1.9.2p180.
B Seven

FreeBSD의 9 1.9.3와 나를위한 작품
user569825

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)

2014 년 10 월 24 일에 최신 2.1.3 문서로 업데이트 됨


7
나는 시작하는 0없이 달을 얻는 방법을 찾고 있습니다 ... 일이 아닙니다.
Shpigford

2
모든 사람들이이 게시물에 투표하는 이유는 무엇입니까? 이 strftime 도우미 목록이 유용하다고 생각했을 것입니다!
Rob Cameron

4
나는 사람들이 질문에 답하지 않기 때문에 투표를한다고 생각합니다. 그 자체로 목록은 매우 유용하지만 이러한 옵션 중 어느 것도 OP가 요청한대로 해당 월의 선행 "0"을 방지하지 않습니다.
Benry 2011-06-29

1
+1이 질문이 원래 질문에 답하지 않음에도 불구하고 비슷한 것을 Google에 검색하는 다른 사람들에게 유용하지만 정확히 OP는 아닙니다.
David Oneill 2011

1
% e는 바람직하지 않을 수 있으며 OP가 원하는 것이 아닐 수도있는 선행 공백 (예 : "1/01/2012")을 제공합니다.
brad

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'

우아하지는 않지만 간단합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.