小田利通と申します。

作ってみました。

ruby -e '
class Time
  def %(fmt)
    self.strftime(fmt)
  end
end

class String
  alias :__percent__ :%
  def %(data)
    data=data.to_a
    split(/(%\([^)]*\)T)/).map {|fmt|
      fmt.match(/(%\((?<fmt>[^)]*)\)T)/) ?
        (data.shift % $~[:fmt]) :
         fmt.__percent__(data.shift(fmt.scan(/%%|(%.)/).flatten.compact.size))
    }.join
  end
end

today=Time.now;

puts( <<FMTEND % [today, today.year, today.month, today.day] )
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 Today is %(%Y-%m-%d %H:%M:%S)T
  %d - %d - %d
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
FMTEND
'
> 出力結果
%%%%%%%%%%%%%%%%
 Today is 2015-05-09 10:17:34
  2015 - 5 - 9
%%%%%%%%%%%%%%%

あくまでも個人的な感想ですが、
%( )T は一般的に知られていないので使いたくないです。

Time#% も定義していますが、% がフォーマット出力以外にも使われる演算子ですので
あまり良い気はしません。

Toshimichi Oda 
  http://alato.ne.jp/oda