in reply to locale warnings when exec "+" op

If you look onto implementation of Add in Date::Handler source you will see the source of the problem (I think):

my $newdate = ref($self)->new({ date => $epoch, time_zone => $self->Ti +meZone() });

As you can see it creates new Date::Handler object inside, and ignores locale attribute of the current object. So new object uses default locale which is en_US. I hope the patch that you will attach to bug report will be applied soon ;)

Also, have a look onto other modules for manipulations with dates. DateTime is quite popular nowadays.

Replies are listed 'Best First'.
Re^2: locale warnings when exec "+" op
by PhillipHuang (Beadle) on Nov 12, 2010 at 09:25 UTC
    Hello zwon, thanks for your reply. I have tried to write a patch to fix this issue.
    phillip@athens:~/script/Date-Handler-1.2$ cat locale.patch --- Handler.pm.original 2010-11-12 16:49:31.817657134 +0800 +++ Handler.pm 2010-11-12 16:42:35.153656643 +0800 @@ -541,7 +541,7 @@ my $epoch = $self->{epoch}; - my $newdate = ref($self)->new({ date => $epoch, time_zone => +$self->TimeZone() }); + my $newdate = ref($self)->new({ date => $epoch, time_zone => +$self->TimeZone(), locale => $self->Locale() }); my $self_array = $newdate->AsArray(); #Take care of the months. @@ -554,7 +554,7 @@ $self_array->[0] += $years; my $posix_date = ref($self)->new({ date => $self_array, - time_zone => $self->TimeZone(), + time_zone => $self->TimeZone(), locale => $s +elf->Locale() }); if($self->INTUITIVE_MONTH_CALCULATIONS())
    and I find a early mistaken in first post inwhich "Date::Handler::Delta" would not include locale and timezone. here's the modified codes and run without warning messages about locale.
    #!/usr/bin/perl #name: date.pl use strict; use warnings; use Date::Handler; use Date::Handler::Delta; my $delta = new Date::Handler::Delta([3,0,0,0,0,0]); my $date = new Date::Handler({ date=>time, time_zone=>'Asia/Shanghai', locale=>'zh_CN.utf8', }); my $newdate = $date + $delta; print "date=$date\n"; print "delta=$delta\n"; print "newdate=$newdate\n";