Search code examples
androidtimezonesimpledateformatdatetime-formatgmt

Convert indian time zone to local time


In my app I am getting time from server in API in IST timezone, I want to show time in device's local time zone.

Below is my code for this but it seems its not working.

SimpleDateFormat serverSDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat utcSDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat localSDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
serverSDF.setTimeZone(TimeZone.getTimeZone("Asia/Calcutta"));
utcSDF.setTimeZone(TimeZone.getTimeZone("UTC"));
localSDF.setTimeZone(TimeZone.getDefault());

Date serverDate = serverSDF.parse(dateString);
String utcDate = utcSDF.format(serverDate);
Date localDate = localSDF.parse(utcDate);

From server I am getting time "2018-02-28 16:04:12" in IST and the code above displays "Wed Feb 28 10:34:12 GMT+05:30 2018".


Solution

  • Update: Check this answer by @istt which uses modern Java8 date-time api.

    You don't need to change format in UTC first. You can simply use:

    SimpleDateFormat serverSDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    SimpleDateFormat localSDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    serverSDF.setTimeZone(TimeZone.getTimeZone("Asia/Kolkata"));
    localSDF.setTimeZone(TimeZone.getDefault());
    
    String localDate = localSDF.format(serverSDF.parse(dateString));