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

Reply via email to