Local time
The same moment in time has a unique local interpretation depending upon the time of year and your position on Earth. The operating system provides the Flash Player with two local temporal modifiers: One for Time zone designation (TZD) and one for Daylight saving time (DST). Local time is derived by applying these modifiers to the value of UTC.

Local time = UTC + TZD + DST

This post previously contained Flash content.

Timezones: from 'Keeping Track of Time with Flash MX'', New Riders 2002

Time zone (TZD)
If you ask two people at different longitudes "what time is it?" you will get two different answers. For example, when it is 11 am in New York, it is 4 pm in London and 1 am the following day in Tokyo. This is because the Earth is divided longitudinally (pole to pole) into 24 time zones spaced 15° apart. The areas within each time zone observe a local or 'civil time' one hour earlier than the zone immediately to the east.

Gotcha: Territories on a zone boundary decide which side of the zone they wish to be on. Consequently very few of the lines dividing the time zones are actually straight.

Daylight Saving Time (DST)
Thanks mainly to the efforts of a London builder named William Willett we have the controversial notion of daylight saving time (DST). This practice means that in some locations, all clocks are put one hour ahead of local (TZD) time during the summer months.

Gotcha: The Flash 5 Player incorrectly applies the DST rule for the US Pacific territory to all locations.

Gotcha: Although it's easy to determine whether DST is in effect at the end user's location, it's a much bigger problem to determine it for any other location. The rules for DST are a muddy political affair that vary greatly from location to location, and year to year.

Determining the values of TZD and DST
It is often useful to know the difference between the current local time and the current UTC time. The following property returns the difference, measured in minutes.

var tzo:Number = d.timezoneOffset

Gotcha: The term 'timezoneOffset' is a bit of a red herring as this value contains the combined offset for timezone and Daylight Saving Time.

The following code can be used to determine the individual values of TZD and DST. Both functions return their offsets in milliseconds.

public static function getTimezone():Number {
  // Create two dates: one summer and one winter 
  var d1:Date = new Date( 0, 0, 1 ) 
  var d2:Date = new Date( 0, 6, 1 ) 
  // largest value has no DST modifier 
  var tzd:Number = Math.max( d1.timezoneOffset, d2.timezoneOffset ) 
  // convert to milliseconds 
  return tzd * 60000

public static function getDST( d:Date ):Number 
  var tzd:Number = getTimezone()
  var dst:Number = (d.timezoneOffset * 60000) - tzd 
  return dst