Here is my code to do this. My question is how does android(any other system take care of DST internally). DST rules can change. Or is it a too corner case to be of any real concern.
public long getLocalTimeFromUTCTime(long utcTime)
{
Time time = new Time();
time.set(utcTime);
TimeZone localTimezone = TimeZone.getDefault();
time.switchTimezone(localTimezone.getID());
time.normalize(false);
return time.toMillis(false);
}