|
分類:[Java]
初心者ではないのですが、初心者のような事で困っています。 Listインターフェースに関してですが、以下のようなコードがあります。
List<String> strings = new ArrayList<String>(); strings.add("String001"); strings.add("String002"); System.out.println(strings.get(0)); System.out.println(strings.get(1));
当然コンソールに出力されるのは String001 String002 です。 ここまでは何の問題もありません。
ところが、まずは、下記のDayクラスを作ります。 public class Day { private Calendar day; public Calendar getDay() { return this.day; } /** * 曜日を示す値を取得する。 * @return int 曜日を示す値 1(日曜日)〜7(土曜日) */ public int getDayOfWeek() { return this.day.get(Calendar.DAY_OF_WEEK); } public int date; /** * コンストラクタ。 * @param day 当該日付のCalendar */ public Day(Calendar day, int date) { this.day = day; this.date = date; } /** * 日にちを文字列で取得する。 * @param format SimpleDateFormatの書式文字列 "d"か"dd"のいづれか * @return 日にちの文字列 "1"〜"31"、あるいは"01"〜"31" */ public String getDay(SimpleDateFormat format) { return format.format(this.day.getTime()); } }
そして、このDayクラスのインスタンスを生成するDayDataCreaterクラスを作ります。 lic class DayDataCreater { /** * DayDataを作成する年月 */ private Calendar month; public ArrayList<Day> days; public ArrayList<Day> getDays() { return this.days; } /** * コンストラクタ * @param month DayDataを作成する年月 */ public DayDataCreater(Calendar month) { this.month = month; this.days = new ArrayList<Day>(); } /** * DayDataを作成する */ public void createDayData() { // コレクションの対象となる月 int targetMonth = this.month.get(Calendar.MONTH); // コレクションの対象となる月の1日目を生成 Calendar checkCalendar = this.month; checkCalendar.set(Calendar.DATE, 1); //System.out.println(checkCalendar.getTime()); // 月が変わるまでコレクションを追加 while(checkCalendar.get(Calendar.MONTH) == targetMonth) { Day day = new Day(checkCalendar, checkCalendar.get(Calendar.DATE)); //System.out.println(day.getDay().getTime()); this.days.add(day); checkCalendar.add(Calendar.DATE, 1); //System.out.println(checkCalendar.getTime()); //System.out.println("days size =" + this.days.size()); } } }
そして、このDayDataCreaterクラスをテストするためのJUnitクラスを作りました。 @Test public void testCreateDayData() { System.out.println("createDayData"); DayDataCreater instance = new DayDataCreater(this.calendar); instance.createDayData(); //ArrayList<Day> result = instance.getDays(); List<Day> result = instance.days; //System.out.println("days size =" + result.size()); Day day = result.get(15); System.out.println(day.getDay().getTime()); System.out.println(day.getDay(new SimpleDateFormat("dd"))); //day = result.get(29); //System.out.println(day.getDay().getTime()); // TODO review the generated test code and remove the default call to fail. //fail("The test case is a prototype."); }
すると、resultコレクションのどの要素のCalendarを出力しても Sun Dec 01 09:38:49 JST 2013 となってしまいます。
私の考えでは、コレクションの最初の要素では Fri Nov 01 09:38:49 JST 2013 最後の要素では Sat Nov 30 09:38:49 JST 2013 が出力されるはずで、Sun Dec 01 、つまり12月1日が出力される理由がさっぱりわからず、昨日からハマっています。 ごく基本的な勘違いをしていると思っているのですが、理由をご教示頂ければ幸いです。
|