1# (c) Sam Vilain, 2004 2 3package Tangram::Type::Date::DateTime; 4 5use strict; 6use Tangram::Type::Date::Cooked; 7use vars qw(@ISA); 8@ISA = qw( Tangram::Type::Date::Cooked ); 9 10use DateTime; 11 12use Carp qw(confess); 13 14$Tangram::Schema::TYPES{datetime} = Tangram::Type::Date::DateTime->new; 15 16# 17sub get_importer 18{ 19 my $self = shift; 20 my $context = shift; 21 $self->SUPER::get_importer 22 ($context, 23 sub { my($iso)=shift; 24 $iso =~ m/^(\d{4})-(\d\d)-(\d\d)T ?(\d?\d):(\d\d):(\d\d)$/ 25 or confess "bad ISO format from internal; $iso"; 26 return DateTime->new( year => $1, 27 month => $2, 28 day => $3, 29 hour => $4, 30 minute => $5, 31 second => $6 ); 32 } 33 ); 34} 35 36sub get_exporter 37{ 38 my $self = shift; 39 my $context = shift; 40 $self->SUPER::get_exporter($context, sub { (shift)->iso8601 }); 41} 421; 43