in reply to Date conversion with Class::DBI
I'm now just overriding the accessors for each date column and keeping the date in MySQL's format.
I'd still be interesting in knowing how a has_a solution should work all together.
Here's my (prototype) code:
package My::DBI; use base 'Class::DBI::mysql'; sub setup { my $sub_class = shift; my $table = shift; $sub_class->set_up_table($table); for my $col_name ($sub_class->all_columns) { my $col_type = $sub_class->column_type($col_name); if($col_type eq 'date') { # customize accessor to do euro formatting my $real_accessor = "_${col_name}_accessor"; no strict 'refs'; *{$sub_class.'::'.$col_name} = sub { my $self = shift; if(@_) { # setting my $date = shift; if($date =~ m! (\d+) / (\d+) (?:/ (\d+) )+!x) { my $y = $3; $y += ($y < 70) ? 2000 : 1900 if($y < 100); $date = sprintf "%4d-%02d-%02d", $y,$2,$1; } return $self->$real_accessor($date); } else { my $date = $self->$real_accessor(@_); $date =~ s!(\d{4})-(\d\d)-(\d\d)!$3/$2/$1!; return $date; } } } } + }
DB<1> p $s->ses_date 23/06/2003 DB<2> x $s->{ses_date} 0 '2003-06-23' DB<3> $s->ses_date('1/2/3') DB<4> p $s->{ses_date} 2003-02-01 DB<5> x $s->{ses_date} 0 '2003-02-01'
|
|---|