Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #18573
| Newsgroups | comp.lang.java.programmer |
|---|---|
| Date | 2012-09-06 10:21 -0700 |
| References | <3a69eb4a-f3c0-4b56-9a67-6833ccb2a1c8@googlegroups.com> |
| Message-ID | <da8b641c-6030-4681-81be-4ddc9ef795c7@googlegroups.com> (permalink) |
| Subject | Re: Date/Calendar confusion |
| From | Lew <lewbloch@gmail.com> |
Ulrich Scholz wrote:
> have a look at the function below (Java 5). The first result is 0 as expected. 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#setLenient(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_OF_MONTH) + 1);
" As a result of changing a calendar field using set(), other calendar fields may also change, depending on the calendar field, the calendar field value, and the calendar system. In addition, get(f) will not necessarily return value set by the call to the set method after the calendar fields have been 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 but 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
Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Date/Calendar confusion Ulrich Scholz <d7@thispla.net> - 2012-09-06 01:03 -0700
Re: Date/Calendar confusion nogales <nogales.manuel@gmail.com> - 2012-09-06 02:29 -0700
Re: Date/Calendar confusion Lew <lewbloch@gmail.com> - 2012-09-06 10:21 -0700
Re: Date/Calendar confusion "John B. Matthews" <nospam@nospam.invalid> - 2012-09-06 20:53 -0400
Re: Date/Calendar confusion Lew <lewbloch@gmail.com> - 2012-09-07 11:01 -0700
Re: Date/Calendar confusion "John B. Matthews" <nospam@nospam.invalid> - 2012-09-07 21:02 -0400
Re: Date/Calendar confusion Lew <lewbloch@gmail.com> - 2012-09-07 18:44 -0700
Re: Date/Calendar confusion "John B. Matthews" <nospam@nospam.invalid> - 2012-09-08 09:12 -0400
Re: Date/Calendar confusion Lew <lewbloch@gmail.com> - 2012-09-08 16:51 -0700
csiph-web