Problem changing datetime format

I am trying to format some datetimes like this...2007, February the
9th, 6:30pm

I have the following which gets me part way there.

=> "%Y, %d %B, %I:%M%p")

There are 2 problems
1. There is no "th" formatter so that I get 1st, 2nd, 3rd, 4th, 5th,
2. PM is in uppercase and I would prefer it in lower.


This question may be too hard for those here :slight_smile:

I understand that 1.ordinalize is '1st' (Edge) and 'PM'.downcase is
'pm' but I dont see how it can be applied to Conversions for my custom

Also the hours portion (%I) of the time format make 06 instead of 6,
really, normal people just don't write 06:30

ActiveSupport::CoreExtensions::Time::Conversions::DATE_FORMATS.update(:my_date_format => “%Y, %d %B, %l:%M%P”)

That should do it.

Since the DATE_FORMATS are simple strftime() formatting specs, you can't just create that format. However, you can roll your own (even making it part of Time if you want) like this:

require 'rubygems'
gem 'activesupport', ">=1.4"
require 'active_support'

t =

class Time
   def my_time
     hr = hour % 12
     hr = 12 if
     "%d, %s the %s, %d:%02d%s" % [ year, strftime("%B"), day.ordinalize,
                                    hr, min, strftime("%p").downcase ]

puts t
puts t.my_time


Rob Biedenharn