ho yoje
ho yoje

Reputation: 385

Java: How to get the timestamp of '1000-01-01 00:00:00' in UTC?

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

Answers (1)

Anonymous
Anonymous

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

Related Questions