Alex J. G. Burzyński

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

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.