作業予定表から週単位で作業量を積み上げる どう書く?orgをといてみた。
作業予定表から週単位で作業量を積み上げる どう書く?orgをといてみた。
かなりスパゲッティになってしまっている。
独力で解こうとしたが弱いおつむがヒートしそうなので、fumokmmさんの解答を参考に。
import static java.util.Calendar.* def initTasks = [ [start:"2009/1/10", days:21, mark:"#"], [start:"2009/1/15", days: 6, mark:"@"], [start:"2009/1/10", days: 8, mark:"*"], [start:"2009/1/16", days: 1, mark:"="], [start:"2009/1/16", days: 3, mark:"%"], [start:"2009/1/30", days: 4, mark:"="], ] // 日別のタスクテーブル作成 def eachDayTasks = [:] (new Date("2009/1/1")..new Date("2009/1/31")).each{ date -> eachDayTasks[date] = initTasks.collect{ def start = new Date(it.start) (date in start..<(start+it.days))?it.mark:[] }.flatten() } // 週別のタスクテーブル def eachWeekTasks = [:] eachDayTasks.groupBy{ key, value -> key[WEEK_OF_YEAR] - (key[DAY_OF_WEEK]==SUNDAY?1:0) }.each{ groupKey, task -> eachWeekTasks[task*.key.min().format('MM/dd')] = task*.value.flatten().sort() } // 出力 def createLine = { list, num -> list*.center(num).join() } def line = [] line << createLine(eachWeekTasks.keySet(), 6) (0..
結構汚いw
初めて知ったこと
いつもSimpleDateFormatを利用してフォーマット処理を記述していた。
たとえば、
new SimpleDateFormat("yyyy/MM/dd").format(new Date())
みたいに。
groovy1.5.7(から?)ではDate.formatメソッドが使える。
new Date().format("yyyy/MM/dd")
結構便利。
ちょっとしたTips
Calendar.SUNDAY、Calendar.WEEK_OF_YEARなどの定数は、ソースの先頭で以下の分を記述することでクラスの指定を省略できて、ちょっと見やすくなる。
import static java.util.Calendar.*
ディスカッション
コメント一覧
こんにちは。
new Date().format(“yyyy/MM/dd”)なんてあるんですね。便利ですね。
ちょっと調べてみたら、
Date date = Date.parse(‘yyyy/MM/dd’, ‘2009/02/03’)
ってのもあるみたいでこちらも便利。