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)