Time::Zone reads tzfile(5) files and then provides methods which allow you to
translate time_t values into timezone local time values and back again.
(it even gets things right when you ask for a local time spec to be translated
back, and the time occurs twice in that zone (eg during a backward jump)
or the time doesn't occur at all (during a forward jump))

The name of the tzfile(5) directory. Defaults to /usr/local/zoneinfo,
which should be the right place on any modern unixoid system. If you
are stuck on a machine which doesn't have this, or has an out-of-date
or broken tzfile(5) dataset, you can always copy the tzfiles onto
the machine in question, and set this option to point at them.

Is the ZONE (or the default zone, if ZONE is not supplied) one of the many
names by which UTC (Universal Coordinate Time) is known?
( The UTC zone has, by definition, no time shifts and no leap seconds. )

Note that, unlike other methds which take a ZONE argument, utczone does not
set the default timezone for the object it is called on.

This is entirely because I'm too lazy to make the other methods work this way.
So there.

Note that in this case only one of the yyyy or year, and only one of
the mon or mm key value pairs, needs to be set. ( And the etla field
need not be set either ). The dst flag field may be set, but is only
important when a time occurs twice in a zone ( eg during a backward
shift overlap ).

If ZONE is something true, the default zone is set to ZONE before proceeding.

There are a couple of ``interesting'' cases that mktime needs to deal with -
the exact behaviour of mktime in these cases is controlled by the
mktime_strict option. Note that even if
mktime calculates a time_t value of 0, it will return ZERO_TRUE, so a FALSE
(or even false) return value will always indicate an error.