Re: Date/Calendar confusion
Ulrich Scholz wrote:
have a look at the function below (Java 5). The first result is 0 as exp=
ected. But why is the second one different?
private static void testDate() throws ParseException
{
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'=
T'HH:mm:ss.SSS");
It's lenient by default.
http://docs.oracle.com/javase/7/docs/api/java/text/DateFormat.html#setLenie=
nt(boolean)
http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#isLenient(=
)
"The default is lenient."
Check the docs when you have a question like this.
TimeZone timeZone = TimeZone.getTimeZone("GMT");
timeZone.setRawOffset(0); // get GMT time zone for sure
WTF?
dateFormat.setTimeZone(timeZone);
Calendar calendar1 = Calendar.getInstance(timeZone, Locale.US);
Date date1 = dateFormat.parse("1970-01-01T00:00:00.000");
calendar1.setTime(date1);
System.out.println(calendar1.getTimeInMillis()); // is 0
Calendar calendar2 = Calendar.getInstance(timeZone, Locale.US);
Date date2 = dateFormat.parse("0000-00-00T00:00:00.000");
What date is that, really?
calendar2.setTime(date2);
// adjust for the epoch 01.01.1970
calendar2.set(Calendar.YEAR, calendar2.get(Calendar.YEAR) + 1970)=
;
calendar2.set(Calendar.MONTH, calendar2.get(Calendar.MONTH) + 1);
By this time, 'get(Calendar.MONTH)' is probably not what you think.
calendar2.set(Calendar.DAY_OF_MONTH, calendar2.get(Calendar.DAY_O=
F_MONTH) + 1);
" As a result of changing a calendar field using set(), other calendar fiel=
ds may also change, depending on the calendar field, the calendar field val=
ue, and the calendar system. In addition, get(f) will not necessarily retur=
n value set by the call to the set method after the calendar fields have be=
en recomputed. The specifics are determined by the concrete calendar class.=
"
http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html
System.out.println(calendar2.getTimeInMillis()); // should be 0 b=
ut is -124335907200000
}
When you set the 'Calendar' to the invalid date, it readjusted its internal=
values so those
'00' values were made into valid values.
--
Lew