I wanted to check the difference in time before and after the daylight saving time started. I am using a JVM where timezone has some issue with DST WRT Brazilian time. I could see the output where it says that 21st October falls under DST, which is wrong as the daylight saving started on 4th of November. I would like to see the timing difference which is 1 Hour in between 20th of October and 21st of October, which I could see in my application because of JRE Timezone issue. Is there any way I can achieve this by a program. Here below the code I have used to see if the date is under DST or not.
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
public class Timezone
{
public static void main(String[] args) throws ParseException {
TimeZone TIMEZONE = TimeZone.getTimeZone("Brazil/East");
System.out.println("timeZone : " + TIMEZONE);
Calendar c = Calendar.getInstance(TIMEZONE);
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
dateFormat.setTimeZone(TIMEZONE);
Date date = dateFormat.parse("2018-10-20T00:00:00");
c.setTime(date);
System.out.println("In dst " + c.getTimeZone().inDaylightTime(c.getTime()));
date = dateFormat.parse("2018-10-21T00:00:00");
c.setTime(date);
System.out.println("In dst " + c.getTimeZone().inDaylightTime(c.getTime()));
date = dateFormat.parse("2018-11-04T00:00:00");
c.setTime(date);
System.out.println("In dst " + c.getTimeZone().inDaylightTime(c.getTime()));
}
}
Adding further to my question I was able to figure out that daylight saving is applied by using my above program. I would like something where it should show me: On 20th October time is 9 am whereas same time due to DST shifted by 1 hr, i.e., 10 am. Is there any way to achieve this?
Expected output:
timeZone : sun.util.calendar.ZoneInfo[id="Brazil/East"]
Time is: 21-10-2018 07:52:16
Actual Output faulty JVM:
timeZone : timeZone : sun.util.calendar.ZoneInfo[id="Brazil/East"]
Time is: 21-10-2018 08:52:30
I'll add a very brief answer. It shows that 1 day is not equal to 24 hours, i.e. DST changed. I also stepped over to Java 8 because I'm more familiar with it.
ZoneId timezone = ZoneId.of("Brazil/East");
ZonedDateTime t = ZonedDateTime.of(2018, 10, 20, 7, 52, 16, 0, timezone);
System.out.println(t);
System.out.println(t.plus(1, ChronoUnit.DAYS));
System.out.println(t.plus(24, ChronoUnit.HOURS));
Output:
2018-10-20T07:52:16-03:00[Brazil/East]
2018-10-21T07:52:16-02:00[Brazil/East]
2018-10-21T08:52:16-02:00[Brazil/East]