import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;
-import java.util.GregorianCalendar;
import java.util.Map;
import java.util.TimeZone;
import org.cacert.gigi.localisation.Language;
import org.cacert.gigi.output.template.Outputable;
import org.cacert.gigi.util.DayDate;
+import org.cacert.gigi.util.CalendarUtil;
import org.cacert.gigi.util.HTMLEncoder;
public class DateSelector implements Outputable {
if ( !(1900 < year && 1 <= month && month <= 12 && 1 <= day && day <= 32)) {
return false;
}
- return true; // TODO checkdate
+
+ if ( !CalendarUtil.isDateValid(year, month, day)) {
+ return false;
+ }
+
+ return true;
}
@Override
}
public DayDate getDate() {
- Calendar gc = GregorianCalendar.getInstance();
- gc.set(year, month - 1, day, 0, 0, 0);
- gc.set(Calendar.MILLISECOND, 0);
- return new DayDate(gc.getTime().getTime());
+ return CalendarUtil.getDateFromComponents(year, month, day);
}
public static SimpleDateFormat getDateFormat() {
--- /dev/null
+package org.cacert.gigi.util;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.TimeZone;
+
+public class CalendarUtil {
+
+ public static boolean isDateValid(int year, int month, int day) {
+
+ Calendar c = GregorianCalendar.getInstance();
+ c.set(year, month - 1, day);
+ return c.get(Calendar.YEAR) == year && c.get(Calendar.MONTH) == month - 1 && c.get(Calendar.DATE) == day;
+
+ }
+
+ public static DayDate getDateFromComponents(int year, int month, int day) {
+ Calendar cal = Calendar.getInstance();
+ cal.setTimeZone(TimeZone.getTimeZone("UTC"));
+ cal.setTimeInMillis(0);
+ cal.set(year, month - 1, day, 0, 0, 0);
+ Date dob = cal.getTime();
+ return new DayDate(dob.getTime());
+ }
+}
--- /dev/null
+package org.cacert.gigi;
+
+import static org.junit.Assert.*;
+
+import java.util.Calendar;
+import java.util.TimeZone;
+
+import org.cacert.gigi.util.CalendarUtil;
+import org.cacert.gigi.util.DayDate;
+import org.junit.Test;
+
+public class TestCalendarUtil {
+
+ @Test
+ public void testGetDateFromComponents() {
+
+ Calendar now = Calendar.getInstance();
+ now.setTimeZone(TimeZone.getTimeZone("UTC"));
+
+ int year = now.get(Calendar.YEAR);
+ int month = now.get(Calendar.MONTH) + 1;
+ int days = now.get(Calendar.DATE);
+ now.setTimeInMillis(0);
+ now.set(year, month - 1, days, 0, 0, 0);
+
+ DayDate dob = CalendarUtil.getDateFromComponents(year, month, days);
+ DayDate d = new DayDate(now.getTimeInMillis());
+
+ assertEquals(d.getTime(), dob.getTime());
+ dob = CalendarUtil.getDateFromComponents(year + 1, month, days);
+
+ assertNotEquals(d.getTime(), dob.getTime());
+
+ }
+
+ @Test
+ public void testIsDateValid() {
+ assertTrue(CalendarUtil.isDateValid(2016, 2, 28));
+ assertTrue(CalendarUtil.isDateValid(2016, 2, 29));
+ assertFalse(CalendarUtil.isDateValid(2016, 2, 30));
+ assertFalse(CalendarUtil.isDateValid(2016, 4, 31));
+
+ assertTrue(CalendarUtil.isDateValid(2000, 2, 28));
+ assertTrue(CalendarUtil.isDateValid(2000, 2, 29));
+ assertFalse(CalendarUtil.isDateValid(2000, 2, 30));
+ assertFalse(CalendarUtil.isDateValid(2000, 4, 31));
+
+ assertTrue(CalendarUtil.isDateValid(2015, 2, 28));
+ assertFalse(CalendarUtil.isDateValid(2015, 2, 29));
+ assertFalse(CalendarUtil.isDateValid(2015, 2, 30));
+ assertFalse(CalendarUtil.isDateValid(2015, 4, 31));
+
+ }
+
+}