http://qs321.pair.com?node_id=374655

One of my favorite features of Class::DBI is the ability to inflate/deflate fields into any object. For instance, your date or time columns can be expanded into DateTime objects. The snippet below creates a method which, when called with a column name, will expand that column into a DateTime object. It requires the DateTime::Format::DBI module and the DateTime::Format module for your database. Within your application, whatever date field you get out of the database will automagically become a DateTime instance.
package My::Database; # Main Class::DBI module use base 'Class::DBI'; # Other Class::DBI code here sub is_datetime { my $class = shift; my $field = shift || return; use DateTime::Format::DBI; my $dtf = DateTime::Format::DBI->new( $class->db_Main ); $class->has_a( $field => 'DateTime', inflate => sub { $dtf->parse_datetime( shift ) }, deflate => sub { $dtf->format_datetime( shift ) }, ); } package My::Database::SomeTable; use base 'My::Database'; # Other Class::DBI code here __PACKAGE__->is_datetime( 'timestamp' );