package Types::DateTime; use strict; use warnings; use namespace::autoclean; use Type::Library -base, -declare => 'DateTimeT'; use Type::Utils -all; use Types::Standard -types; class_type DateTimeT, { class => 'DateTime' }; coerce DateTimeT, from Num, via { require DateTime; DateTime->from_epoch(epoch => $_ ); }; coerce DateTimeT, from Str, via { require DateTime::Format::ISO8601; s{([+-])(\d\d)(\d\d)\z}{$1$2:$3}; DateTime::Format::ISO8601->new->parse_datetime($_) }; 1;