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.