Ruby strftime: Bulan tanpa nol di depan?

89

Apakah Ruby strftimememiliki format untuk bulan tersebut tanpa awalan nol?

Saya menemukan %euntuk mendapatkan hari tanpa nol di depan, tetapi tidak beruntung dengan bulan itu.

Pada akhirnya menginginkan tanggal yang diformat seperti: 9/1/2010

Shpigford
sumber
2
Apakah itu tanggal 9 Januari atau 1 Oktober?
telent
@telent itu bagaimanapun klien menafsirkannya :)
Factor Mystic
11
Saya cukup yakin ini bukan tanggal 1 Oktober .....
brad

Jawaban:

138

Beberapa versi dari strftimedo allow prefixing dengan minus untuk memformat nol di depan, misalnya:

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

Namun ini akan tergantung pada strftimesistem Anda. Jadi untuk konsistensi saya akan melakukan sesuatu seperti ini:

dt = Time.local(2010, 'Sep', 1)
printf "%d/%d/%d", dt.day, dt.month, dt.year
draegtun.dll
sumber
Sepertinya minusnya berfungsi dengan baik dengan Ruby 1.8.7, terima kasih!
Rob
2
@Rob: Ya, ini akan berfungsi selama sistem Anda strftimemendukungnya (misalnya, ini tidak berfungsi di sini pada 1.8.7 yang berjalan di atas Mac OSX Snow Leopard).
draegtun
Ah ya, saya seharusnya mengklarifikasi bahwa itu 1.8.7 di ubuntu linux
Rob
Bekerja untuk saya. 1.9.2p180 di Ubuntu.
B Tujuh
Berfungsi untuk saya dengan 1.9.3 di FreeBSD 9
pengguna569825
39

Berikut daftar pemformatan yang saya gunakan. Ini dari dokumen untuk 2.1.3. Menurut ini, Anda akan menginginkan %-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)

Diperbarui ke 2.1.3 dokumen terbaru pada 10/24/14

Rob Cameron
sumber
7
Saya mencari cara mendapatkan bulan tanpa awalan nol ... bukan hari.
Shpigford
2
Mengapa semua orang memilih posting ini TURUN? Saya akan berpikir memiliki daftar pembantu strftime ini akan berguna!
Rob Cameron
4
Saya membayangkan bahwa orang-orang memilihnya karena tidak menjawab pertanyaan itu. Dengan sendirinya, daftar ini cukup berguna, tetapi tidak satupun dari opsi ini mencegah awalan "0" untuk bulan seperti yang diminta OP.
Benry
1
+1 Meskipun pertanyaan ini tidak menjawab pertanyaan asli, ini berguna bagi orang lain yang mencari sesuatu yang mirip di Google, tetapi tidak persis OP.
David Oneill
1
% e menyediakan ruang terdepan (yaitu "1/01/2012") yang mungkin tidak diinginkan dan belum tentu sesuai dengan keinginan OP.
brad
8

Dokumen menunjukkan sejumlah opsi berbeda untuk mengonfigurasi format angka. Menambahkan ke format% -d, Anda juga dapat menggunakan tanda ini sebagai pengganti "-":

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.
typeoneerror
sumber
7

Saya memiliki masalah serupa dan memperbaikinya dengan mengubahnya strftime("%m")menjadi bilangan bulat.

Sebagai contoh:

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

Sederhana, meski tidak elegan.

cyberw0rm
sumber