Name: sl110371 Date: 06/28/2000
java version "1.1.8"
I'm in Brazil and I?m trying to use daylight saving with JDK1.1.8. The switch
time happens at 00:00 hrs. If we set the start switch date in Oct, 8th 2000
00:00:00 and the end switch date to March , 5th 2000 00:00:00.
In the start switch date we expect the following times:
Sat Oct 07 22:00:00 GMT-3 2000
Sat Oct 07 23:00:00 GMT-3 2000
Sun Oct 08 01:00:00 GMT-2 2000
Sun Oct 08 02:00:00 GMT-2 2000
And in the end switch date we expect the following times:
Sat Mar 04 22:00:00 GMT-02:00 2000
Sat Mar 04 23:00:00 GMT-02:00 2000
Sat Mar 04 23:00:00 GMT-03:00 2000
Sun Mar 05 00:00:00 GMT-03:00 2000
Sun Mar 05 01:00:00 GMT-03:00 2000
I'm using the Brazilian TimeZone ("BET") and setting the daylight saving as
explained above:
SimpleTimeZone pdt = (SimpleTimeZone)TimeZone.getTimeZone("BET");
Locale aLocale = new Locale("pt", "BR");
Locale.setDefault(aLocale);
pdt.setStartRule(9, 2, 1, 0);
pdt.setEndRule(2, 1, 1, 0);
TimeZone.setDefault(pdt);
And the behavior of the dates in the end switch date is:
Sat Mar 04 22:00:00 GMT-02:00 2000
Sat Mar 04 23:00:00 GMT-02:00 2000
Sun Mar 05 00:00:00 GMT-02:00 2000
Sun Mar 05 00:00:00 GMT-03:00 2000
Sun Mar 05 01:00:00 GMT-03:00 2000
And for the start switch date, if I do a
Date aDate = new Date(100,9,7,24,0,0);
System.out.println("new Date(100,9,7,24,0,0): " + aDate.toString());
aDate = new Date(aDate,2000,9,8,0,0,0);
System.out.println("new Date(100,9,8,0,0,0): " + aDate.toString());
The output is:
new Date(100,9,7,24,0,0): Sun Oct 08 01:00:00 PDT 2000
new Date(100,9,8,0,0,0): Sat Oct 07 23:00:00 PST 2000
I have tried the following test
SimpleTimeZone pdt = (SimpleTimeZone)TimeZone.getTimeZone("PST");
Locale.setDefault(aLocale);
pdt.setStartRule(9, 2, 1, 0);
pdt.setEndRule(2, 1, 1, 0);
TimeZone.setDefault(pdt);
The behavior is the same, when I do a new Date in the non existing hour of the
short day (new Date(aDate,2000,9,8,0,0,0);) instead of go to the Sun Oct 08
01:00:00 PDT 2000 it goes to Sat Oct 07 23:00:00 PST 2000. And in the long day
it goes twice to Sun Mar 05 00:00:00 instead of Sat Mar 04 23:00:00.
Does anyone have any idea? Any suggestion would be very important to us.
Thanks in advance.
Source code:
import java.io.File;
import java.util.Vector;
import java.util.SimpleTimeZone;
import java.util.TimeZone;
import java.util.Locale;
import java.util.Calendar;
import java.util.Date;
import java.text.SimpleDateFormat;
public class TestDriver implements Runnable
{
public final int YEAR = Calendar.YEAR;
public final int MONTH = Calendar.MONTH;
public final int DATE = Calendar.DATE;
public final int HOUR = Calendar.HOUR;
public final int MINUTE = Calendar.MINUTE;
public final int SECOND = Calendar.SECOND;
public static void main(String[] args)
{
Thread thread = new Thread(new TestDriver());
thread.start();
}
public void add (Date aDate, int i, int unit)
{
Calendar myCalendar = (Calendar)Calendar.getInstance();
myCalendar.setTime(aDate);
myCalendar.setFirstDayOfWeek(Calendar.SUNDAY);
myCalendar.setMinimalDaysInFirstWeek(7);
myCalendar.set(unit, myCalendar.get(unit) + i);
aDate.setTime(myCalendar.getTime().getTime());
}
public void set(Date aDate, int year, int month, int date, int hour, int
minute, int second)
{
Calendar myCalendar = (Calendar)Calendar.getInstance();
myCalendar.set(year, month, date, hour, minute, second);
myCalendar.setFirstDayOfWeek(Calendar.SUNDAY);
myCalendar.setMinimalDaysInFirstWeek(7);
aDate.setTime(myCalendar.getTime().getTime());
myCalendar.add(HOUR, 1);
}
public void run()
{
Date aDate = new Date();
// Start 9;2;1;0 08/10/2000 00:00
// End 2;1;1;0 05/03/2000 00:00
SimpleTimeZone pdt = (SimpleTimeZone)TimeZone.getTimeZone("BET");
Locale aLocale = new Locale("pt", "BR");
Locale.setDefault(aLocale);
pdt.setStartRule(9, 2, 1, 0);
pdt.setEndRule(2, 1, 1, 0);
TimeZone.setDefault(pdt);
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm zz",
aLocale);
System.out.println();
System.out.println("Start 9;2;1;0 08/10/2000 00:00");
System.out.println("End 2;1;1;0 05/03/2000 00:00");
System.out.println();
System.out.println("Constructor:");
this.set(aDate,2000,1,23,0,0,0);
System.out.println("new Date(100,1,23,0,0,0): " + sdf.format
(aDate));
this.set(aDate,2000,2,4,22,0,0);
System.out.println("new Date(100,2,4,22,0,0): " + sdf.format
(aDate));
this.set(aDate,2000,2,4,23,0,0);
System.out.println("new Date(100,2,4,23,0,0): " + sdf.format
(aDate));
this.set(aDate,2000,2,4,24,0,0);
System.out.println("new Date(100,2,4,24,0,0): " + sdf.format
(aDate));
this.set(aDate,2000,2,5,0,0,0);
System.out.println("new Date(100,2,5,0,0,0): " + sdf.format(aDate));
this.set(aDate,2000,2,5,1,0,0);
System.out.println("new Date(100,2,5,1,0,0): " + sdf.format(aDate));
this.set(aDate,2000,4,10,0,0,0);
System.out.println("new Date(100,4,10,0,0,0): " + sdf.format
(aDate));
this.set(aDate,2000,9,7,23,0,0);
System.out.println("new Date(100,9,7,23,0,0): " + sdf.format
(aDate));
this.set(aDate,2000,9,8,0,0,0);
System.out.println("new Date(100,9,8,0,0,0): " + sdf.format(aDate));
this.set(aDate,2000,9,8,1,0,0);
System.out.println("new Date(100,9,8,1,0,0): " + sdf.format(aDate));
this.set(aDate,2000,10,23,0,0,0);
System.out.println("new Date(100,10,23,0,0,0): " + sdf.format
(aDate));
System.out.println();
System.out.println("Add minute:");
this.set(aDate,2000,1,23,0,0,0);
System.out.println("new Date(100,1,23,0,0,0): " + sdf.format
(aDate));
this.add(aDate, 1, this.MINUTE);
System.out.println("add(1,MINUTE): " + sdf.format(aDate));
this.set(aDate,2000,2,4,22,59,0);
System.out.println("new Date(100,2,4,22,59,0): " + sdf.format
(aDate));
this.add(aDate, 1, this.MINUTE);
System.out.println("add(1,MINUTE): " + sdf.format(aDate));
this.set(aDate,2000,2,4,23,59,0);
System.out.println("new Date(100,2,4,23,59,0): " + sdf.format
(aDate));
this.add(aDate, 1, this.MINUTE);
System.out.println("add(1,MINUTE): " + sdf.format(aDate));
this.set(aDate,2000,2,5,0,0,0);
System.out.println("new Date(100,2,5,0,0,0): " + sdf.format(aDate));
this.add(aDate, 1, this.MINUTE);
System.out.println("add(1,MINUTE): " + sdf.format(aDate));
this.set(aDate,2000,4,10,0,0,0);
System.out.println("new Date(100,4,10,0,0,0): " + sdf.format
(aDate));
this.add(aDate, 1, this.MINUTE);
System.out.println("add(1,MINUTE): " + sdf.format(aDate));
this.set(aDate,2000,9,7,23,59,0);
System.out.println("new Date(100,9,7,23,59,0): " + sdf.format
(aDate));
this.add(aDate, 1, this.MINUTE);
System.out.println("add(1,MINUTE): " + sdf.format(aDate));
this.set(aDate,2000,9,8,0,0,0);
System.out.println("new Date(100,9,8,0,0,0): " + sdf.format(aDate));
this.add(aDate, 1, this.MINUTE);
System.out.println("add(1,MINUTE): " + sdf.format(aDate));
this.set(aDate,2000,10,23,0,0,0);
System.out.println("new Date(100,10,23,0,0,0): " + sdf.format
(aDate));
this.add(aDate, 1, this.MINUTE);
System.out.println("add(1,MINUTE): " + sdf.format(aDate));
}
}
Output:
Start 9;2;1;0 08/10/2000 00:00
End 2;1;1;0 05/03/2000 00:00
Constructor:
new Date(100,1,23,0,0,0): 23/02/2000 00:00 GMT-02:00
new Date(100,2,4,22,0,0): 04/03/2000 22:00 GMT-02:00
new Date(100,2,4,23,0,0): 04/03/2000 23:00 GMT-02:00
new Date(100,2,4,24,0,0): 05/03/2000 00:00 GMT-02:00
new Date(100,2,5,0,0,0): 05/03/2000 00:00 GMT-03:00
new Date(100,2,5,1,0,0): 05/03/2000 01:00 GMT-03:00
new Date(100,4,10,0,0,0): 10/05/2000 00:00 GMT-03:00
new Date(100,9,7,23,0,0): 07/10/2000 23:00 GMT-03:00
new Date(100,9,8,0,0,0): 07/10/2000 23:00 GMT-03:00
new Date(100,9,8,1,0,0): 08/10/2000 01:00 GMT-02:00
new Date(100,10,23,0,0,0): 23/11/2000 00:00 GMT-02:00
Add minute:
new Date(100,1,23,0,0,0): 23/02/2000 00:00 GMT-02:00
add(1,MINUTE): 23/02/2000 00:01 GMT-02:00
new Date(100,2,4,22,59,0): 04/03/2000 22:59 GMT-02:00
add(1,MINUTE): 04/03/2000 23:00 GMT-02:00
new Date(100,2,4,23,59,0): 04/03/2000 23:59 GMT-02:00
add(1,MINUTE): 05/03/2000 00:00 GMT-02:00
new Date(100,2,5,0,0,0): 05/03/2000 00:00 GMT-03:00
add(1,MINUTE): 05/03/2000 00:01 GMT-03:00
new Date(100,4,10,0,0,0): 10/05/2000 00:00 GMT-03:00
add(1,MINUTE): 10/05/2000 00:01 GMT-03:00
new Date(100,9,7,23,59,0): 07/10/2000 23:59 GMT-03:00
add(1,MINUTE): 08/10/2000 01:00 GMT-02:00
new Date(100,9,8,0,0,0): 07/10/2000 23:00 GMT-03:00
add(1,MINUTE): 07/10/2000 23:01 GMT-03:00
new Date(100,10,23,0,0,0): 23/11/2000 00:00 GMT-02:00
add(1,MINUTE): 23/11/2000 00:01 GMT-02:00
(Review ID: 106615)
======================================================================