converLocalTimeToUtcTime is wrong. Not its implementation, but its existence. You don't need to (in fact, should not) convert the millis from one TZ to another. The millis (or the Date object that wraps them) represents an instant in time, without regard to TZ. If you're in PDT and I'm in EDT and my friend is in the part of Indiana that doesn't use DST so he's in EST, and we all do System.currentTimeMillis() or new Date() at the same instant, we'll all get the same millis value. There's no "converting" that Date or millis to a different TZ because it doesn't have a TZ.
The TZ only comes into play when you display the time. We can choose to display that instant in time as 5:00 PDT or 7:00 EST or 8:00 EDT. If you want to display your time as, say, 8:00 EDT instead of 5:00 PDT, then you use a SimpleDateFormat object and set its TZ appropriately, and then call format().
If you need to do lots of date/time related operations, you might want to check out the JodaTime library. Not that it would save you from understanding time zones and daylight saving changes if you need to process them (eg. what Jeff said), but it provides more clear and consistent API to do date/time computations. And a good documentation too.