1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import java.text.{DateFormatSymbols, SimpleDateFormat}
import java.util.{Date, Locale}

object YearCalendar {
  import java.util.Calendar._
  def mkString(n:int, s:String) = List.make(n, s).mkString
  def print(year:int):unit = print(year, Locale.getDefault)
  def print(year:int, locale:Locale):unit = {
    val ws   = (new DateFormatSymbols(locale)).getShortWeekdays mkString "  "
    val format = (new SimpleDateFormat("dd", locale)).format _:Date => String
    val wwidth = ws.split("  ")(1).getBytes.size
    val cal = getInstance(locale)

    (0 to 11).foreach { month => 
      println(year+"/"+(month+1)+"\n"+ws)
      var n = {cal.set(year,month,1); cal}.get(DAY_OF_WEEK)
      Console.print(mkString((n-1)*(wwidth+2), " "))
      do {
        Console.print(mkString(wwidth, " ")+format(cal.getTime).replaceFirst("^0", " "))
        if(n == 7){ println(""); n = 0 }
      }while({n = n +1;cal.add(DATE, 1);cal.get(MONTH) == month})
      
      println("\n")
    }
  }
}

YearCalendar print 2007
YearCalendar.print(2007, Locale.US)
YearCalendar.print(2007, Locale.CHINA)