Skip Menu |
 

This queue is for tickets about the DateTime-BusinessHours CPAN distribution.

Report information
The Basics
Id: 127569
Status: new
Priority: 0/
Queue: DateTime-BusinessHours

People
Owner: Nobody in particular
Requestors: COSMICNET [...] cpan.org
Cc:
AdminCc:

Bug Information
Severity: (no value)
Broken in: 2.03
Fixed in: (no value)



Subject: Calculations fail for certain timezones and dates
Download (untitled) / with headers
text/plain 1.3k
Hello, We've hit an issue with the date calculations and certain time zones. For following example script: use DateTime; use DateTime::BusinessHours; my $timeZoneID = 'America/Sao_Paulo'; my $datetimeReached = '20181004065112'; my $tsLocal = '20181104120615'; my $reached = DateTime->new( year => 2018, month => 10, day => 4, hour => 6, minute => 51, second => 0, time_zone => $timeZoneID ); my $current = DateTime->new( year => 2018, month => 11, day => 4, hour => 12, minute => 6, second => 0, time_zone => $timeZoneID ); my $delta = DateTime::BusinessHours->new( datetime1 => $reached, datetime2 => $current, worktiming => [ 8, 17 ], # 8am to 5pm weekends => [ 6, 7 ] # Saturday and Sunday ); my $deltaHours = $delta->gethours; Generates the error: Invalid local time for date in time zone: America/Sao_Paulo This is because America/Sao_Paulo does not have midnight on it's DST change. Meaning the truncate calls from _calculate fail. A simple fix is to do the calculations from the floating timezone: < my $start = $d1->clone->truncate( to => 'day' ); < my $end = $d2->clone->truncate( to => 'day' ); Show quoted text
> my $start = $d1->clone->set_time_zone('floating')->truncate( to => 'day' ); > my $end = $d2->clone->set_time_zone('floating')->truncate( to => 'day' );
Please let me know if you have any questions.


This service is sponsored and maintained by Best Practical Solutions and runs on Perl.org infrastructure.

Please report any issues with rt.cpan.org to rt-cpan-admin@bestpractical.com.