First: I would suggest your use of “Local Time” is incorrect and that you would be better off thinking of it as “Abstract Time”. My responses below go into more detail but in short you obtain a “Local” time by “Localizing” and “Abstract” time. The process of “Localization” requires a relevant “Locale” input which, for date/time values, is a “TimeZone”.
An instant is a point in the universal time, it's a physical concept, unrelated to world calendars. The time point at which the man first landed on the moon is an instant, as is the moment at which my server restarted. It is not related to a Timezone at all. We can specified it by some arbitrary convention (milliseconds passed since the first atomic explosion at Hiroshima), or by some human calendar at some place/moment: for example, the "wall date and clock used at New York". If (only if) you use a Gregorian Calendar to specify/show a instant, you need a date, a time and a timezone. (but you have many timezones to choose from - as you have several calendars - a timezone is not determined by an instant). A full datetime (date, time, timezone) implies an instant - but an instant does not imply a timezone.
I suggest to take a look at the Joda time API, which is one of the very few date-time API ("key concepts") that is generally though to cover quite completely and consistently these issues.
Hernán J. González
http://hjg.com.ar/