Index: modules/luni/src/test/java/tests/api/java/util/CalendarTest.java =================================================================== --- modules/luni/src/test/java/tests/api/java/util/CalendarTest.java (revision 423073) +++ modules/luni/src/test/java/tests/api/java/util/CalendarTest.java (working copy) @@ -432,6 +432,25 @@ .getTimeZone()); } + /** + * @tests java.util.Calendar#getTimeInMillis() + */ + public void test_getTimeInMillis() { + Calendar cal = Calendar.getInstance(); + + int year = Integer.MIN_VALUE + 71; + cal.setTimeZone(TimeZone.getTimeZone("GMT"));; + cal.set(Calendar.YEAR, year + 1900); + cal.set(Calendar.MONTH, Calendar.JANUARY); + cal.set(Calendar.DATE, 1); + cal.set(Calendar.HOUR_OF_DAY, 0); + cal.set(Calendar.MINUTE, 0); + cal.set(Calendar.SECOND, 0); + cal.set(Calendar.MILLISECOND, 0); + + assertEquals(cal.getTimeInMillis(), 6017546357372606464L); + } + protected void setUp() { defaultLocale = Locale.getDefault(); Locale.setDefault(Locale.US); Index: modules/luni/src/main/java/java/util/GregorianCalendar.java =================================================================== --- modules/luni/src/main/java/java/util/GregorianCalendar.java (revision 423073) +++ modules/luni/src/main/java/java/util/GregorianCalendar.java (working copy) @@ -743,7 +743,9 @@ return (int) days + 1; } - private long daysFromBaseYear(int year) { + private long daysFromBaseYear(int iyear) { + long year = iyear; + if (year >= 1970) { long days = (year - 1970) * (long) 365 + ((year - 1969) / 4); if (year > changeYear) {