I am trying to convert a date/time GMT 0 to GMT -6 in Perl.
For example, a DHCP Server lease time is in the following format:
2010/02/18 23:48:37
I am trying to convert that time to the Localtime zone (GMT -6) but need it to honor Daylight savings time.
The script below may be overkill, but I am not sure how to proceed from here. (Any suggestions would be awsome).
my $TIMESTART;
$TIMESTART = "2010/02/18 23:48:37";
$TIMESTART =~ s/\//-/g;
use DateTime;
use DateTime::TimeZone;
use DateTime::Format::MySQL;
my $dt = DateTime::Format::MySQL->parse_datetime($TIMESTART);
my $tz = DateTime::TimeZone->new( name => 'America/Chicago' );
print $tz->offset_for_datetime($dt) . "\n";
It will output the following lines:
2010-02-18T23:48:37
-21600
I need to be able to add -21600 to the date to get the local time zone of GMT -6 but I am not sure how to approch this.
Call set_time_zone
method 2 times:
my $dt = DateTime::Format::MySQL->parse_datetime($TIMESTART);
$dt->set_time_zone('UTC'); ## set timezone of parsed date time
$dt->set_time_zone('America/Chicago'); ## change timezone in safe way
print DateTime::Format::MySQL->format_datetime($dt),"\n"; ## check the result
How it works:
DateTime
object without time zone specified, "floating" time zone is setset_time_zone
change time zone to UTC
without conversionset_time_zone
change UTC
to America/Chicago