How I can I convert timezones in Perl?
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:
- when you create
DateTime
object without time zone specified, "floating" time zone is set - first call of
set_time_zone
change time zone toUTC
without conversion - second call of
set_time_zone
changeUTC
toAmerica/Chicago
This will convert UTC time into ETC time. You can also use date/time in any format using +FORMAT parameter of date.
date --date='TZ="ETC" 18:30'