To whom might interest: New York rule:
my $rules = [ bless( { 'at' => '2:00', 'from' => '1987', 'in' => 'Apr', 'letter' => 'D', 'name' => 'US', 'offset_from_std' => 3600, 'on' => 'Sun>=1', 'save' => '1:00', 'to' => 'max', 'type' => undef }, 'DateTime::TimeZone::OlsonDB::Rule' ), bless( { 'at' => '2:00', 'from' => '1967', 'in' => 'Oct', 'letter' => 'S', 'name' => 'US', 'offset_from_std' => 0, 'on' => 'lastSun', 'save' => '0', 'to' => 'max', 'type' => undef }, 'DateTime::TimeZone::OlsonDB::Rule' ) ] ; New York is in the Eastern Time Zone in the United States of America (USA). Eastern Standard Time (EST) is 5 hours behind Greenwich Mean Time (GMT-5). Daylight Saving Time begins for most of the United States at 2 a.m. on the first Sunday of April. Time reverts to standard time at 2 a.m. on the last Sunday of October. Example: in 2000 CE, DST started at 2 AM (local) the 2nd April. This date, at 2 AM does not exists - only from 3 AM forward. Since the Time Zone is GMT-5, with the advanced hour, the difference equals -4 hours. So, If it's 3 AM in NY, it's 7 AM GMT. Sunday, in 29 October of the same year, at 2 AM (local) the clock changes to 1 AM ( if we calculate for 1 AM we get 4 hours of difference; calculating for 2 AM, we get the 5 ). Europe: Start: Last Sunday in March End: Last Sunday in October Time: 1.00 am (01:00) Greenwich Mean Time (GMT) Example: > my $rules = [ > bless( { > 'at' => '1:00u', > 'from' => '1996', > 'in' => 'Oct', > 'letter' => '', > 'name' => 'EU', > 'offset_from_std' => 0, > 'on' => 'lastSun', > 'save' => '0', > 'to' => 'max', > 'type' => undef > }, 'DateTime::TimeZone::OlsonDB::Rule' ), > bless( { > 'at' => '1:00u', > 'from' => '1981', > 'in' => 'Mar', > 'letter' => 'S', > 'name' => 'EU', > 'offset_from_std' => 3600, > 'on' => 'lastSun', > 'save' => '1:00', > 'to' => 'max', > 'type' => undef > }, 'DateTime::TimeZone::OlsonDB::Rule' ) > ] > ; Continental Portugal > UTC+1 from the last Sunday in March at 01:00 to the last Sunday in October at 02:00 Europe/Lisbon Year DST: 2000 Begin: March 26, 1 am GMT End: October 29, 1 am GMT So, in Portugal the 26 March , the 1h local ( = 1 am GMT ) does not exist - only from 2 forward (GMT+1); In October 29, the change is at 1 GMT = 2h local, that passes to 1h (GMT0). The reason for my confusion: in the New York case, the "at" field, that defines the hour where the change starts ( or ends ) is local; in Lisbon is in GMT time - the "u" stands for that. My confusion came from there. So everything's right. Kind regards, Rui Miguel Fernandes Porto - Portugal