Scalaでformat

前回の書き込みから久方ぶりになります。
細かなことでも継続していないと駄目でありますな。

ScalaではJavaとは異なる書式形式で数値や日付の文字列出力が行えるようなので
試してみましたわ。書式指示子が複数ある場合にどの引数を割り当てるのかに
「<」が必要になるのが慣れないと分かりづらいですね。
なお、今回はこちらを参考にさせていただいております。
ScalaのStringLike.formatで日付フォーマット
java.util.Formatterによると月の部分はゼロ補填の2桁表記しかないようですが
可変で1~2桁表示はできないのかしら。

import java.util._
import java.text._

object DateFormatTest {

    def main(args: Array[String]): Unit = {
        val timeRecorder = new TimeRecorder()
        timeRecorder.start()
        
        writeByStringLike()
        writeByDateFormat()
        
        timeRecorder.end()
    }
  
    def writeByStringLike() {
        println("----------------------------------")
        // YYYY/MM/DD + day of the week
        println("%tY/%<tm/%<td %<tA(%<ta)"
                format new Date())

        // YYYY/MM/D + day of the week
        println("%tY/%<tm/%<td %<tA(%<ta)"
                format getDate(2011,4,1))

        // YYYY/MM/D + day of the week
        println("%tY/%<tm/%<td %<tA(%<ta)"
                format getDate(2012,2,29))

        println("%tY/%<tm/%<td(%<ta)  %tY/%<tm/%<td(%<ta)"
                format (getDate(2012,2,29), getDate(2012,3,1)))
    }

    def writeByDateFormat() {
        val df = new SimpleDateFormat("yyyy/M/d(E)")
        println("----------------------------------")
        println(df.format(new Date()))
        println(df.format(getDate(2012,1,1)))
        println(df.format(getDate(2012,12,31)))
        println(df.format(getDate(2012,7,20))+" "+
                df.format(getDate(2012,9,15)))
    }
    
    def getDate(year: Int, month: Int, day: Int) = {
        new GregorianCalendar(year, month-1, day).getTime()
    }
      
    class TimeRecorder {
        private val startTime = new Date()
        
        def start() {
            println("Start >>> %tY/%<tm/%<td %<TH:%<TM:%<TS:%<TL"
                    format startTime)
        }
        
        def end() {
            val endTime = new Date()
            val processTime = endTime.getTime()-startTime.getTime()
            println("----------------------------------")
            print("End >>> %tY/%<tm/%<td %<TH:%<TM:%<TS:%<TL"
                    format (endTime, processTime))
            println(" time=%.3f(sec)" format processTime / 1000.0)
        }
    }
}

ちなみに実行結果はこんな感じになります。

Start >>> 2012/05/03 14:53:37:337
----------------------------------
2012/05/03 木曜日(木)
2011/04/1 金曜日(金)
2012/02/29 水曜日(水)
2012/02/29(水)  2012/03/01(木)
----------------------------------
2012/5/3(木)
2012/1/1(日)
2012/12/31(月)
2012/7/20(金) 2012/9/15(土)
----------------------------------
End >>> 2012/05/03 14:53:37:491 time=0.154(sec)