We have a large project that we would like to use our "local" time zone
across many calls to DateTime. We are considering implementing something
like this:
###
package DateTimeX::Local;
use parent 'DateTime';
# Calculate and cache the local time zone based on the OS.
our $LocalTZ = DateTime::TimeZone->new( name => 'local' );
sub new { shift->SUPER::new( time_zone => $LocalTZ, @_ ) };
sub now { shift->SUPER::now( time_zone => $LocalTZ, @_ ) };
###
This works for us, but there are probably some other places where
'floating' is the default time zone... I see that 'floating' is
hard-coded in a few places as the default time zone.
It seems like a useful alternate design might be add this class method:
DateTime->DefaultTimeZone($tz);
... and refactor to use that instead of the hardcoded value of
'floating' everywhere.
We could then stick a call to DateTime->DefaultTimeZone somewhere, and
developers could go on using DateTime as usual for the most part.
The problem with the DateTimeX::Local solution is that someone could
slip up and use DateTime directly, and everything would work until...
after 7 or 8pm Eastern Time. :) . Also, the approach would break if a
new location in DateTime was added that also used the 'floating' default
as a hard-coded value.
What do you think about the best way to set the time zone to "local"
across a large project?
Mark