Dean wrote:
Hi...
Im trying to fix a program I wrote 2yrs ago that calculates the price
needed to charge guests for using parking facilities. The error occurs
when DST kicks in and ends. Basically at the start of DST I need to
add an hour to the total time cars are parked and deduct an hour at
the end of DST.
You should not need to do this for yourself. Calendar and GregorianCalendar
handle timezones and DST correctly if your system is setup properly.
Here in the UK DST came in at 2am on 25th March (the clocks went forward). This
code creates 4 GregorianCalendars, at 10pm on the 24th, at 01:59:59 and
02:00:01 and 03:00:00 on the 25th. The difference between them shows you that
the calendars are correct:
public class TestTime {
public static void main(String[] args) {
GregorianCalendar cal1 = new GregorianCalendar(2007,2,24,22,0,0);
GregorianCalendar cal2 = new GregorianCalendar(2007,2,25,1,59,59);
GregorianCalendar cal3 = new GregorianCalendar(2007,2,25,2,0,1);
GregorianCalendar cal4 = new GregorianCalendar(2007,2,25,3,0,0);
DateFormat fmt = SimpleDateFormat.getInstance();
System.out.println(fmt.format(cal1.getTime()));
System.out.println(fmt.format(cal2.getTime()));
System.out.println(fmt.format(cal3.getTime()));
System.out.println(fmt.format(cal4.getTime()));
System.out.println((cal2.getTimeInMillis() -
cal1.getTimeInMillis())/60.0/60.0/1000.0);
System.out.println((cal3.getTimeInMillis() -
cal1.getTimeInMillis())/60.0/60.0/1000.0);
System.out.println((cal4.getTimeInMillis() -
cal1.getTimeInMillis())/60.0/60.0/1000.0);
}
}
Run this code in the a UK timezone and you should get a result of 3.9997, 3.0002
and 4.0002. So 01:59:59 is almost 4 hours after 10pm, whereas 02:00:01 is only
3 hours after 10pm and 03:00:01 is very slightly over 4 hours after i.e
immediately following 01:59:59. If you do something similar for your
timezone/DST changeover you should get similar results.
I think these time differences are what you need to calculate how long a car was
parked during the switch in DST, provided the clocks on the parking meters
record time in the correct way.
--
Nigel Wade, System Administrator, Space Plasma Physics Group,
University of Leicester, Leicester, LE1 7RH, UK
E-mail : n...@ion.le.ac.uk
Phone : +44 (0)116 2523548, Fax : +44 (0)116 2523555
Im an idoit. Turns out that I messed up the coversion from
milliseconds to hours. The program works fine now with the change.