NAME
    MooseX::Types::DateTime::W3C - W3C DateTime format type constraint

VERSION
    version 1.103360

SYNOPSIS
        package My::Class;

        use Moose;
        use MooseX::Types::DateTime::W3C qw( DateTimeW3C );

        has 'datetime' => (
            is => 'rw',
            isa => DateTimeW3C,
            coerce => 1,
        );


        package main;

        my $obj = My::Class->new();

        # YYYY
        $obj->datetime('1997');

        # YYYY-MM
        $obj->datetime('1997-07');

        # YYYY-MM-DD
        $obj->datetime('1997-07-16');

        # YYYY-MM-DDThh:mmTZD
        $obj->datetime('1997-07-16T19:20');
        $obj->datetime('1997-07-16T19:20Z');
        $obj->datetime('1997-07-16T19:20+01:00');

        # YYYY-MM-DDThh:mm:ssTZD
        $obj->datetime('1997-07-16T19:20:30');
        $obj->datetime('1997-07-16T19:20:30Z');
        $obj->datetime('1997-07-16T19:20:30+01:00');

        # YYYY-MM-DDThh:mm:ss.sTZD
        $obj->datetime('1997-07-16T19:20:30.45');
        $obj->datetime('1997-07-16T19:20:30.45Z');
        $obj->datetime('1997-07-16T19:20:30.45+01:00');


        # coercion from DateTime objects
        use DateTime;

        $obj->datetime(
            DateTime->new(
                year => 1997, month => 7, day => 16,
                hour => 19, minute => 20, second => 30,
                time_zone => 'UTC'
            )
        );
        # same as 1997-07-16T19:20:30Z

        # coercion from Num
        $obj->datetime( time() );


        # exported functions

        # is_DateTimeW3C - validate
        my $w3cdtf_string = '1997-07-16T19:20:30.45Z';
        if ( is_DateTimeW3C($w3cdtf_string) ) { # yes, it is
            ...
        }

        # to_DateTimeW3C - coerce
        $w3cdtf_string = to_DateTimeW3C( DateTime->now );

        $w3cdtf_string = to_DateTimeW3C( time() );

DESCRIPTION
    This class provides W3C date/time format type constraint.

TYPES
  DateTimeW3C
        has 'datetime' => (
            is => 'rw',
            isa => DateTimeW3C,
            coerce => 1,
        );

    "DateTimeW3C" is a subtype of "Str" validated against format described
    at <http://www.w3.org/TR/NOTE-datetime>.

    Coercion is supported from DateTime objects and numbers (treated as time
    in seconds since unix epoch).

        $obj->datetime( DateTime->now );

        $obj->datetime( time() );

    Please note that time coerced from "Num" will be in "UTC" time zone.

EXPORTS
    In addition to type constraint following functions are exported:

  is_DateTimeW3C
        if ( is_DateTimeW3C($w3cdtf_string) ) {
            ...
        }

    Tests if given value is a valid W3C DateTime string.

  to_DateTimeW3C
        # from DateTime object
        $w3cdtf_string = to_DateTimeW3C( DateTime->now );

        # from number
        $w3cdtf_string = to_DateTimeW3C( time() );

    Coerce given value into valid W3C DateTime string.

    Note: nanoseconds are added only if != 0.

    Note: numbers are converted into DateTime objects in UTC time zone.

SEE ALSO
    *   <http://www.w3.org/TR/NOTE-datetime>

    *   MooseX::Types

AUTHOR
    Alex J. G. Burzyński <ajgb@cpan.org>

COPYRIGHT AND LICENSE
    This software is copyright (c) 2010 by Alex J. G. Burzyński
    <ajgb@cpan.org>.

    This is free software; you can redistribute it and/or modify it under
    the same terms as the Perl 5 programming language system itself.

