def strftime format='%Y/%m/%d'
      format.
        gsub('%%', 'PERCENT_SUBSTITUTION_MARKER').
        gsub('%+', '%a %b %e %H:%M:%S %Z %Y').
        gsub('%c', '%a %-d %B %Y').
        gsub('%x', '%D').
        gsub('%D', '%y/%m/%d').
        gsub('%F', '%Y-%m-%d').
        gsub('%v', '%e-%B-%Y').
        gsub('%Y', year.to_s).
        gsub('%C', (year / 100).to_s).
        gsub('%y', (year % 100).to_s).
        gsub('%m',  '%02d' % month).
        gsub('%_m', '%2d' % month).
        gsub('%-m', month.to_s).
        gsub('%^B', '%B').
        gsub('%B', MONTHNAMES[month]).
        gsub('%E^B', '%^EB').
        gsub('%^EB', EN_MONTHNAMES[month].capitalize).
        gsub('%EB', EN_MONTHNAMES[month]).
        gsub('%h', '%b').
        gsub('%^h', '%^b').
        gsub('%b', ABBR_MONTHNAMES[month]).
        gsub('%^b', ABBR_MONTHNAMES[month].capitalize).
        gsub('%d', '%02d' % day).
        gsub('%e', '%2d' % day).
        gsub('%-d', day.to_s).
        gsub('%j', '%03d' % yday.to_s).
        gsub('%A', DAYNAMES[wday]).
        gsub('%a', ABBR_DAYNAMES[wday]).
        gsub('%EA', EN_DAYNAMES[wday]).
        gsub('%Ea', ABBR_EN_DAYNAMES[wday]).
        gsub('%E^A', '%^EA').
        gsub('%^EA', EN_DAYNAMES[wday].capitalize).
        gsub('%E^a', '%^Ea').
        gsub('%^Ea', ABBR_EN_DAYNAMES[wday].capitalize).
        gsub('%w', wday.to_s).
        gsub('%n', "\n").
        gsub('%t', "\t").
        gsub('PERCENT_SUBSTITUTION_MARKER', '%')
    end
def strftime format='%Y/%m/%d'
      format.
        gsub('%%', 'PERCENT_SUBSTITUTION_MARKER').
        gsub('%+', '%a %b %e %H:%M:%S %Z %Y').
        gsub('%c', '%a %-d %B %Y').
        gsub('%x', '%D').
        gsub('%D', '%y/%m/%d').
        gsub('%F', '%Y-%m-%d').
        gsub('%v', '%e-%B-%Y').
        gsub('%Y', year.to_s).
        gsub('%C', (year / 100).to_s).
        gsub('%y', (year % 100).to_s).
        gsub('%m',  '%02d' % month).
        gsub('%_m', '%2d' % month).
        gsub('%-m', month.to_s).
        gsub('%^B', '%B').
        gsub('%B', MONTHNAMES[month]).
        gsub('%E^B', '%^EB').
        gsub('%^EB', EN_MONTHNAMES[month].capitalize).
        gsub('%EB', EN_MONTHNAMES[month]).
        gsub('%h', '%b').
        gsub('%^h', '%^b').
        gsub('%b', ABBR_MONTHNAMES[month]).
        gsub('%^b', ABBR_MONTHNAMES[month].capitalize).
        gsub('%d', '%02d' % day).
        gsub('%e', '%2d' % day).
        gsub('%-d', day.to_s).
        gsub('%j', '%03d' % yday.to_s).
        gsub('%A', DAYNAMES[wday]).
        gsub('%a', ABBR_DAYNAMES[wday]).
        gsub('%EA', EN_DAYNAMES[wday]).
        gsub('%Ea', ABBR_EN_DAYNAMES[wday]).
        gsub('%E^A', '%^EA').
        gsub('%^EA', EN_DAYNAMES[wday].capitalize).
        gsub('%E^a', '%^Ea').
        gsub('%^Ea', ABBR_EN_DAYNAMES[wday].capitalize).
        gsub('%w', wday.to_s).
        gsub('%n', "\n").
        gsub('%t', "\t").
        gsub('PERCENT_SUBSTITUTION_MARKER', '%')
    end
Formats time according to the directives in the given format string.
 The directives begins with a percent (%) character. Any text not listed as a
 directive will be passed through to the output string.

 The directive consists of a percent (%) character, zero or more flags,
 optional minimum field width, optional modifier and a conversion specifier as
 follows.

   %<flags><width><modifier><conversion>

 +flags+ and +conversion+ are as in +Time+ exept that the +E+ flag is not egnored
 any more, it forse useing English names