>my $dt1 = DateTime->new(
>year => 2014,
>month => 3,
>day => 30,
>hour => 3,
>minute => 30,
>second => 0,
>time_zone => 'Europe/Kiev',);
>
>return an error "Invalid local time for date in time zone: Europe/Kiev".

The error message is correct: there is no 03:30 in Kiev time on
2014-03-30.  Kiev switched from UT+2h to UT+3h at 01:00 UT, jumping from
02:59 to 04:00 local time.

>I have datetime, stored in "UTC" and have some periodical task (period 1 day). 
>Then i have a customer - for him information must be viewed in??'Europe/Kiev'.

This part is no problem.  Each UT time corresponds to a definite Kiev
local time; you can always perform this conversion.  The code that you
quoted doesn't perform conversion; you need to create a DateTime with
time_zone=>"UTC" and then set_time_zone.

>But he want that task will execute in 00:03:30 in his local timezone.

Presuming you mean at 03:30, this is not possible for Kiev on 2014-03-30.
In general, it is not possible to do something at a fixed local time
every day; there's always some day and locality for which that local
time doesn't exist.  In the extreme, there are cases such as Christmas
Island (Pacific/Kiritimati) on 1995-01-01, where local time skipped the
entire calendar day as the island switched from the eastern side of the
International Date Line to the more fashionable western side.

You must select some alternative behaviour to follow on days when the
desired local time doesn't exist.

-zefram

Reply via email to