Hi,
I'm having problem with Timezone IST, which is GMT + 05:30.
SimpleDateFormat returns incorrect date when timezone on client machine is other than IST.
When Timezone on machine is IST, correct value is returned.
See the below example. All four dates are same ( LKT is also + 05:30).
When timezone on machine is IST, all four dates are displayed same.
For any other timezone, IST date is displayed incorrectly, rest 3 are displayed correctly.
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test {
public static void main(String[] args) throws ParseException {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEE MMM d HH:mm:ss Z yyyy");
Date date1 = simpleDateFormat.parse("Wed Sep 02 02:17:41 +0530 2009");
Date date2 = simpleDateFormat.parse("Wed Sep 02 02:17:41 IST 2009");
Date date3 = simpleDateFormat.parse("Tue Sep 01 13:47:41 PDT 2009");
Date date4 = simpleDateFormat.parse("Wed Sep 02 02:17:41 LKT 2009");
System.out.println(date1.toString());
System.out.println(date2.toString());
System.out.println(date3.toString());
System.out.println(date4.toString());
System.out.println("Date1 equals Date2? " + date1.equals(date2));
System.out.println("Date1 equals Date3? " + date1.equals(date3));
System.out.println("Date1 equals Date4? " + date1.equals(date4));
System.out.println("Date1.getTime() " + date1.getTime());
System.out.println("Date2.getTime() " + date2.getTime());
System.out.println("Date3.getTime() " + date3.getTime());
System.out.println("Date4.getTime() " + date4.getTime());
}
}
Output when timezone on client is GMT IST (GMT + 05:30):
Wed Sep 02 02:17:41 IST 2009
Wed Sep 02 02:17:41 IST 2009
Wed Sep 02 02:17:41 IST 2009
Wed Sep 02 02:17:41 IST 2009
Date1 equals Date2? true
Date1 equals Date3? true
Date1 equals Date4? true
Date1.getTime() 1251838061000
Date2.getTime() 1251838061000
Date3.getTime() 1251838061000
Date4.getTime() 1251838061000
Output when timezone on client is GMT (Casablanca):
Tue Sep 01 15:47:41 ACT 2009
Tue Sep 01 19:17:41 ACT 2009
Tue Sep 01 15:47:41 ACT 2009
Tue Sep 01 15:47:41 ACT 2009
Date1 equals Date2? false
Date1 equals Date3? true
Date1 equals Date4? true
Date1.getTime() 1251838061000
Date2.getTime() 1251850661000
Date3.getTime() 1251838061000
Date4.getTime() 1251838061000
Output when timezone on client is PDT ( -0800, -0700 for this date due due Daylight saving):
Tue Sep 01 13:47:41 PDT 2009
Tue Sep 01 17:17:41 PDT 2009
Tue Sep 01 13:47:41 PDT 2009
Tue Sep 01 13:47:41 PDT 2009
Date1 equals Date2? false
Date1 equals Date3? true
Date1 equals Date4? true
Date1.getTime() 1251838061000
Date2.getTime() 1251850661000
Date3.getTime() 1251838061000
Date4.getTime() 1251838061000
IS this a bug in java??
Regards