image

  • フォト Amazonギフト券
    ※この時計の時刻は、閲覧しているパソコンのものであり、必ずしも正確な時間とは限りません

検索

最近のトラックバック

無料ブログはココログ

« 2009年11月23日 | トップページ | 2009年11月25日 »

2009年11月24日

2009-11-24

Scala で1年分のカレンダーを

"どう書く サイト" の
 "n年の年間カレンダーを返すプログラムを作ってください"
に対する Scala での回答例 http://ja.doukaku.org/comment/5060/
を参考にして、自分なりのコードを書いてみた。

$ cat YearCalendar2.scala
// See http://ja.doukaku.org/comment/5060/
package scalaapplication

import java.text.DateFormatSymbols
import java.util.Locale
import java.util.Calendar

object Main extends Application {
    val year = new YearCalendar2
    Console.println(year.print(2009))
    Console.println(year.print(2009, Locale.US))
    Console.println(year.print(2009, Locale.CHINA))
}
class YearCalendar2 {
    def selString(v:Int, width:Int) = ("%%%ds".format(width)).format(if(v == 0) "." else v.toString)
    def print(year:Int):String = print(year, Locale.getDefault)
    def print(year:Int, locale:Locale):String = {
        val monthSyms = new DateFormatSymbols(locale).getMonths
        val weekSyms = (new DateFormatSymbols(locale)).getShortWeekdays
        val selWidth = 1 + (if (locale == Locale.JAPAN) 2 else if (locale == Locale.CHINA) 6 else 3) // weeks(1).getBytes.length
        val cal = Calendar.getInstance(locale)

        var ans = (locale.getDisplayCountry) + "\n"                   // 国の名前
        for (month <- cal.getActualMinimum(Calendar.MONTH) to cal.getActualMaximum(Calendar.MONTH)) {
            cal.set(year, month, 1)
            ans += (year + " / " + monthSyms(month) + "\n")     // 月の名前
            ans += (weekSyms.mkString(" ")+ "\n")               // 曜日の名前
            val maxDay = cal.getActualMaximum(Calendar.DATE)
            val w = cal.get(Calendar.DAY_OF_WEEK)
            for (_ <- 1 to w - 1) { ans += (selString(0, selWidth)) } // 先頭の空白セル
            for (d <- 1 to maxDay; dw = d + w - 1) {
                ans += (selString(d, selWidth) +
                        (if ((dw % 7 == 0) && (d != maxDay)) "\n" else ""))
            }
            ans += ("\n")
        }
        ans
    }
}

39 行と少し長くなってしまったが。
# 曜日の名前の文字列の表示長さを得る部分は、どう書くにある方法は私の環境ではうまく動作しなかった。
# でも他の良い方法もわからなかったので、個別対応してしまっている orz...

実行結果はこんな感じ。(等幅フォントでないとレイアウトが崩れる表示される...)

日本
2009 / 1月
日 月 火 水 木 金 土
  .  .  .  .  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 31
2009 / 2月
日 月 火 水 木 金 土
  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
...
アメリカ合衆国
2009 / January
Sun Mon Tue Wed Thu Fri Sat
   .   .   .   .   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  31
...
2009 / 十二月
星期日 星期一 星期二 星期三 星期四 星期五 星期六
      .      .      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     31

ピックアップ:和製スパコンに267億円の予算復活, Twitterでの最新の発言をブログ等に表示する方法, etc...

Cd9cad1157d43eeb9b4f9bc58efcfa1a

思わず 綾瀬はるかの '僕の彼女はサイボーグ インターナショナル特別版 [DVD]' を 1 クリック購入してしまった。  http://bit.ly/5IhBKQ

- http://lifehacking.jp/2009/11/six-types-of-time/
> 生産性ばかり追求していないですか? 忘れたくない6種類の時間 | Lifehacking.jp

- http://www.moongift.jp/2009/11/tweetbubbles/
> MOONGIFT: » プレゼンテーションとTwitterを連携させる「TweetBubbles」:オープンソースを毎日紹介

- http://d.hatena.ne.jp/founder/20091124/1258991293
> 和製スパコンに267億円の予算復活 - 成毛眞ブログ

- http://getnews.jp/archives/38838
> 外国人が日本のテレビ番組をつまらないと思うワケ - ガジェット通信

- http://www.msng.info/archives/2009/11/defragging_eeepc_ssd.php
> EeePCのSSDにデフラグをかけたら劇的に動作が軽くなった - 頭ん中

- http://www.arclamp.jp/blog/archives/sensorium_architecture.html
> 無意識のアーキテクチャと意識のアーキテクチャ (arclamp.jp アークランプ)

- http://news.walkerplus.com/2009/1123/6/
> 会社まで片道2時間半!? 今ドキの“通勤時間”実態調査 - 東京ウォーカー

- http://news24.jp/articles/2009/11/23/07148385.html
> 冬の風物詩…カピバラの入浴始まる 静岡 | 日テレNEWS24

- http://maname.vs.land.to/renkoh.html
> 広瀬香美・蓮舫議員対談

- http://labaq.com/archives/51298502.html
> らばQ:見た瞬間ギョッとする、何かおかしな写真15枚

- http://gigazine.net/index.php?/news/comments/20091123_stuffed_viruses/
> HIV・新型インフルエンザ・エボラ出血熱などのウィルスを超巨大化してしまったぬいぐるみ - GIGAZINE

- http://blog.creamu.com/mt/2009/11/twitter_2.html
> Twitterでの最新の発言をブログ等に表示する方法 | CREAMU

« 2009年11月23日 | トップページ | 2009年11月25日 »

mokuji

2013年12月
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 31        

google

  • twitter
  • __
  • _
    Googleボットチェッカー

合わせて読む

  • 合わせて読む
    フィードメーター - katoy: cocolog あわせて読みたい

リンク