Reputation: 385
I got the timestamp of '1000-01-01 00:00:00' in two different results. Does anybody know why?
TimeZone timeZone = TimeZone.getTimeZone(ZoneOffset.UTC);
GregorianCalendar calendar = new GregorianCalendar(timeZone);
calendar.clear();
calendar.set(1000, 0, 1, 0, 0, 0);
System.out.println(calendar.getTimeInMillis()); // print -30609792000000
System.out.println(ZonedDateTime.of(1000, 1, 1,0, 0, 0, 0, timeZone.toZoneId()).toInstant().toEpochMilli()); // print -30610224000000
Upvotes: 0
Views: 473
Reputation: 86278
GregorianCalendar
despite its name uses the Julian calendar for the time before the Gregorian calendar was introduced from 1582 and onward. ZonedDateTime
by contrast uses the Proleptic Gregorian calendar, that is, extrapolates the Gregorian calendar into the centuries where it wasn’t used at that time.
So you are really using two calendar systems. Which explains why you are getting two different results.
Upvotes: 3