Extending strftime

can i change the options which is recognized by strftime
eg:
‘%Y %m %d’ will apply the format of YYYY mm dd

can i do something like extending strftime to recognize ‘YYYY mm dd’
instead ?

because right now , i am running the format string which i get(YYYY mm
dd) through a regex and converting them to the parameters which strftime
recognizes

or please do suggest alternate methods

Lin Wj wrote:

can i change the options which is recognized by strftime
eg:
‘%Y %m %d’ will apply the format of YYYY mm dd

can i do something like extending strftime to recognize ‘YYYY mm dd’
instead ?

because right now , i am running the format string which i get(YYYY mm
dd) through a regex and converting them to the parameters which strftime
recognizes

That sounds like a perfectly reasonable approach.

If you really want to, you can monkey-patch the built-in class (I’d
advise against this though, except in small self-contained scripts)

class Time
alias :old_strftime :strftime
STRFMAP = {
‘YYYY’ => ‘%Y’,
‘mm’ => ‘%m’,
‘dd’ => ‘%d’,
}
STRFRE = /#{STRFMAP.keys.join("|")}/

def strftime(arg)
old_strftime(arg.gsub(STRFRE) { STRFMAP[$&] })
end
end

puts Time.now.strftime(“YYYY-mm-dd”)

Note that by not using the % escape syntax, you may end up with some
subtle bugs:

puts Time.now.strftime(“Today’s YYYY-mm-dd, buddy!”)

=> Today’s 2009-01-13, bu13y!

You can restrict the regular expression to require a word boundary:

STRFRE = /\b(#{STRFMAP.keys.join("|")})\b/

But in this case, a string like “YYYYmmdd” doesn’t work.

On Jan 13, 6:41 am, Lin Wj [email protected] wrote:

can i change the options which is recognized by strftime
eg:
‘%Y %m %d’ will apply the format of YYYY mm dd

can i do something like extending strftime to recognize ‘YYYY mm dd’
instead ?

why not write your own Time method? you don’t need to override
strftime.

because right now , i am running the format string which i get(YYYY mm
dd) through a regex and converting them to the parameters which strftime
recognizes

or please do suggest alternate methods

T.