Monday, May 11, 2009

Java Time and Daylight Savings

I wanted to create a Java based clock which can show timings of London and Newyork. I got stuck at the point of handling DayLight savings. Searched over Google and found out that Java on its own is not handling DayLight Savings.

For ex:

Calendar londonCal = Calendar.getInstance(TimeZone.getTimeZone("Europe/London"));
String londonTime = londonCal.get(Calendar.HOUR_OF_DAY)+":"+londonCal.get(Calendar.MINUTE)+":"+londonCal.get(Calendar.SECOND);

Calendar newyorkCal = Calendar.getInstance(TimeZone.getTimeZone("US/Central"));
String newyorkTime = newyorkCal.get(Calendar.HOUR_OF_DAY)+":"+newyorkCal.get(Calendar.MINUTE)+":"+newyorkCal.get(Calendar.SECOND);

System.out.println("London: "+londonTime+"\nNewYork: "+newyorkTime);

I thought the above code would have handled DayLight savings but to my surprise i got below result in console:

London: 12:23:17
Newyork: 6:23:17

stating diff in time to be:6 hours

wherein currently its daylight savings so it should have been 5 hours and i should have got a result of

London: 12:23:17
Newyork: 7:23:17

hmm either i am not finding a way to get java calendar handle daylight saving or there isnt one which does tht?

1 comment:

Sushma said...

Well well, Just found out that yes Java TimeZone supports DayLight saving as well, it was a mistake in my Timezone parameter, i tried below code and it gave data as expected:

Calendar londonCal = Calendar.getInstance(TimeZone.getTimeZone("Europe/London"));
String londonTime = londonCal.get(Calendar.HOUR_OF_DAY)+":"+londonCal.get(Calendar.MINUTE)+":"+londonCal.get(Calendar.SECOND);

Calendar losAngelesCal = Calendar.getInstance(TimeZone.getTimeZone("America/Los_Angeles"));
String losAngelesTime = losAngelesCal.get(Calendar.HOUR_OF_DAY)+":"+losAngelesCal.get(Calendar.MINUTE)+":"+losAngelesCal.get(Calendar.SECOND);

Calendar dubaiCal = Calendar.getInstance(TimeZone.getTimeZone("Asia/Dubai"));
String dubaiTime = dubaiCal.get(Calendar.HOUR_OF_DAY)+":"+dubaiCal.get(Calendar.MINUTE)+":"+dubaiCal.get(Calendar.SECOND);

Calendar kolkattaCal = Calendar.getInstance(TimeZone.getTimeZone("Asia/Kolkata"));
String kolkattaTime = kolkattaCal.get(Calendar.HOUR_OF_DAY)+":"+kolkattaCal.get(Calendar.MINUTE)+":"+kolkattaCal.get(Calendar.SECOND);

System.out.println("LosAngeles: "+losAngelesTime+"\nLondon: "+londonTime+"\nDubai:"+dubaiTime+"\nKolkatta:"+kolkattaTime);

Console output:
LosAngeles: 5:36:43
London: 13:36:43
Dubai:16:36:43
Kolkatta:18:6:43