2010-09-30 44 views
76

Có phải số strftime của Ruby có định dạng cho tháng không có số 0 đứng đầu không?Ruby strftime: Tháng không có số 0 đứng đầu?

Tôi đã tìm thấy %e để nhận ngày không có số 0 đứng đầu, nhưng không có bất kỳ may mắn nào trong tháng.

Cuối cùng muốn một ngày được định dạng như: 9/1/2010

+2

Đó có phải là ngày 9 tháng 1 hoặc ngày 1 tháng 10 không? – telent

+0

@telent nó tuy nhiên khách hàng giải thích nó :) –

+9

Tôi khá chắc chắn nó không phải là ngày 01 tháng 10 ..... – brad

Trả lời

112

Một số phiên bản của strftime làm phép tiền tố với trừ để định dạng ra số không hàng đầu, cho ví dụ:

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

Tuy nhiên điều này sẽ phụ thuộc vào strftime trên hệ thống của bạn. Vì vậy, để nhất quán, tôi sẽ thực hiện một việc như thế này:

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

Có vẻ như trừ hoạt động tốt với Ruby 1.8.7, cảm ơn! – Rob

+2

@Rob: Có, nó sẽ hoạt động miễn là hệ thống 'strftime' của bạn hỗ trợ nó (ví dụ: nó không hoạt động ở đây trên 1.8.7 chạy trên đầu Mac OSX Snow Leopard). – draegtun

+0

Ah vâng, tôi nên làm rõ rằng nó là 1.8.7 trên linux ubuntu – Rob

31

Đây là danh sách định dạng tôi tắt. Đây là từ các tài liệu cho 2.1.3. Theo đó bạn sẽ muốn %-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) 

cập nhật mới nhất 2.1.3 docs trên 10/24/14

+7

Tôi đang tìm cách để có được tháng mà không có số 0 hàng đầu ... không phải là ngày. – Shpigford

+2

Tại sao mọi người bỏ phiếu cho bài đăng này DOWN? Tôi đã nghĩ rằng việc có danh sách những người giúp việc này sẽ hữu ích! –

+4

Tôi tưởng tượng mọi người bỏ phiếu vì nó không trả lời câu hỏi.Bản thân nó là danh sách khá hữu ích, nhưng không có tùy chọn nào trong số này ngăn cản "0" hàng đầu cho tháng theo yêu cầu của OP. – Benry

6

Tôi đã có một vấn đề tương tự và cố định nó bằng cách chuyển đổi strftime("%m") vào một số nguyên.

Ví dụ:

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

đơn giản, mặc dù không thanh lịch.

7

Tài liệu hiển thị một số tùy chọn khác nhau để định cấu hình định dạng số. Thêm vào định dạng% -d, bạn cũng có thể sử dụng các cờ này thay cho "-":

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. 
Các vấn đề liên quan