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:

  1. 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

    ReplyDelete