Search code examples
androiddatetimedatetimeoffsetandroid-datejava-time

Convert from current TimeZone to UTC decrement by 2 hours instead of 1


I would like to convert a Date from my current TimeZone to UTC.

The results are not understandable for me.

Code:

public static String convertToUTC(String dateStr) throws ParseException
{

    Log.i("myDateFunctions", "the input param is:"+dateStr);

    String uTCDateStr;


    Date pickedDate = stringToDate(dateStr, "yyyy-MM-dd HH:mm:ss");

    Log.i("myDateFunctions", "the input param after it is converted to Date:"+pickedDate);


    TimeZone tz = TimeZone.getDefault();
    Date now = new Date();
    Log.i("myDateFunctions:", "my current Timezone:"+tz.getDisplayName()+" +"+(tz.getOffset(now.getTime()) / 3600000));

    // Convert to UTC
    SimpleDateFormat converter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    converter.setTimeZone(TimeZone.getTimeZone("UTC"));
    uTCDateStr = converter.format(pickedDate);

    Log.i("myDateFunctions", "the output, after i converted to UTC timezone:"+uTCDateStr);

    return uTCDateStr;

}

And LogCat results are:

03-29 20:31:46.804: I/myDateFunctions(18413): the input param is:2014-04-29 20:00:00
03-29 20:31:47.005: I/myDateFunctions(18413): the input param after it is converted to Date:Tue Apr 29 20:00:00 CEST 2014
03-29 20:31:47.005: I/myDateFunctions:(18413): my current Timezone:Central European Time +1
03-29 20:31:47.005: I/myDateFunctions(18413): the output, after i converted to UTC timezone:2014-04-29 18:00:00

As you can see: My TimeZone is CET (GMT+1)

Then why if my input is 20:00 i get back 18:00 instead of 19:00 ?


Solution

  • The problem is daylight savings time. UTC doesn't have it, if yours does it will increase the difference by 1 hour during part of the year.