Received: by 10.224.189.75 with SMTP id dd11mr1039313qab.6.1346918585757; Thu, 06 Sep 2012 01:03:05 -0700 (PDT) Received: by 10.52.28.83 with SMTP id z19mr94467vdg.20.1346918585720; Thu, 06 Sep 2012 01:03:05 -0700 (PDT) Path: csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!news.glorb.com!news-out.readnews.com!transit4.readnews.com!209.85.216.88.MISMATCH!b19no87717qas.0!news-out.google.com!da15ni51772qab.0!nntp.google.com!b19no87713qas.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: comp.lang.java.programmer Date: Thu, 6 Sep 2012 01:03:05 -0700 (PDT) Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=62.156.183.195; posting-account=6nLwcwoAAACyuDWy5iNg9hYCXPlbqduH NNTP-Posting-Host: 62.156.183.195 User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <3a69eb4a-f3c0-4b56-9a67-6833ccb2a1c8@googlegroups.com> Subject: Date/Calendar confusion From: Ulrich Scholz Injection-Date: Thu, 06 Sep 2012 08:03:05 +0000 Content-Type: text/plain; charset=ISO-8859-1 Xref: csiph.com comp.lang.java.programmer:18568 Dear all, have a look at the function below (Java 5). The first result is 0 as expected. But why is the second one different? Thanks, Ulrich private static void testDate() throws ParseException { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS"); TimeZone timeZone = TimeZone.getTimeZone("GMT"); timeZone.setRawOffset(0); // get GMT time zone for sure 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"); 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); calendar2.set(Calendar.DAY_OF_MONTH, calendar2.get(Calendar.DAY_OF_MONTH) + 1); System.out.println(calendar2.getTimeInMillis()); // should be 0 but is -124335907200000 }