I will write another answer to the serdev comment, since it is a little difficult to include a lot of information in the comment.
You say you need to iterate over dates and find distances, and if you make some assumptions that should be valid for your locale or time zone, it's not that difficult. If you ignore the time and use your code to subtract one day from Sat. 04/04/1942, you will receive Fri Fri 03 1942, as expected. If you need to find the number of days between dates, I would calculate it myself:
// set two Calendars to April 1st, 1942 and April 5th, 1942 (both 0:00) Calendar cal1 = new GregorianCalendar(1942, 3, 1); Calendar cal2 = new GregorianCalendar(1942, 3, 5); // divide the difference in ms by the number of ms in 24 hours and round the result long diff = Math.round((cal2.getTimeInMillis() - cal1.getTimeInMillis()) / (24.*60*60*1000));
A simple division with the Finnish time zone will give a difference of 3,958 days, but rounding gives the correct result in 4 days.
For this to work, you must, however, assume that the dates are continuous and that your time zone does not change more than 11 hours between the start and end dates. This is not always the case because some of the participating countries around the international date line have been “switched”. The most recent case was that parts of Kiribati missed the whole country on one side of the date line on December 31, 1994. Before the change, the nation’s time zones covered only a few hours, but since they were separated by date, the country actually had two different dates.
source share