gustav12
gustav12

Reputation: 327

Convert UTC time to local time java Android

Im retrieving some values from a json service and the retrieved datetime values are stored in UTC format. i've tried a lot of sample codes to convert the datetime values to user local timezone but im still getting the same value after conversion.

This is what i have actually: (copied from other posts)

String sJsonDate = "2015-07-08T12:08:13.0625+00:00";

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
try {
    Date localDateTime = simpleDateFormat.parse(sJsonDate);

} catch (ParseException e) {
    e.printStackTrace();
}

The result value (localDateTime) is the same as the original value. I am in Paraguay (GMT-4) and the resulting values needs to be minus one hour diference, like this: ("2015-07-08 07:13:25") (The values are stored in Argentina)

Help please!

Upvotes: 1

Views: 1230

Answers (1)

gustav12
gustav12

Reputation: 327

I've found the solution, we are using day light savings so i had to disccount one hour to the resulting datetime.

So, i share the code for someone else:

public Date getDateInTimeZone(Date currentDate, String timeZoneId) {
    TimeZone timeZone = TimeZone.getTimeZone(timeZoneId);

    Date localDateTime = new Date(currentDate.getTime() + timeZone.getOffset(currentDate.getTime()));
    Calendar cal = Calendar.getInstance();
    cal.setTimeInMillis(localDateTime.getTime());
    if (timeZone.useDaylightTime()) {
        // time zone uses Daylight Saving
        cal.add(Calendar.MILLISECOND, timeZone.getDSTSavings() * -1);// in milliseconds
    }

    return cal.getTime();
}

Usage:

String sDate = "2015-07-08T12:08:13.0625+00:00";
try {    
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
            Date theDate = simpleDateFormat.parse(sDate);
            Date localDateTime = getDateInTimeZone(theDate, TimeZone.getDefault().getID());
        } catch (ParseException e) {
            e.printStackTrace();
        }

Upvotes: 1

Related Questions