---
name: "MooseX::Types::ISO8601"
section: "3pm"
platform: "linux"
package: "libmoosex-types-iso8601-perl"
version: "0.20-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/MooseX::Types::ISO8601"
---

# MooseX::Types::ISO8601(3pm)

ISO8601 date and duration string type constraints and coercions for Moose

## NAME

MooseX::Types::ISO8601 - ISO8601 date and duration string type constraints and coercions for Moose

## VERSION

version 0.20

## SYNOPSIS

```
    use MooseX::Types::ISO8601 qw/
        ISO8601DateTimeStr
        ISO8601TimeDurationStr
    /;
    has datetime => (
        is => 'ro',
        isa => ISO8601DateTimeStr,
    );
    has duration => (
        is => 'ro',
        isa => ISO8601TimeDurationStr,
        coerce => 1,
    );
    Class->new( datetime => '2012-01-01T00:00:00' );
    Class->new( duration => 60 ); # 60s => PT00H01M00S
    Class->new( duration => DateTime::Duration->new(%args) )
```

## DESCRIPTION

This module packages several TypeConstraints with coercions for working with ISO8601 date strings and the DateTime suite of objects.

## DATE CONSTRAINTS

### ISO8601DateStr

An ISO8601 date string. E.g. `"2009-06-11"`

### ISO8601TimeStr

An ISO8601 time string. E.g. `"12:06:34Z"`

### ISO8601DateTimeStr

An ISO8601 combined datetime string. E.g. `"2009-06-11T12:06:34Z"`

### ISO8601DateTimeTZStr

An ISO8601 combined datetime string with a fully specified timezone. E.g. `"2009-06-11T12:06:34+00:00"`

### ISO8601StrictDateStr

### ISO8601StrictTimeStr

### ISO8601StrictDateTimeStr

### ISO8601StrictDateTimeTZStr

As above, only in addition to validating the strings against regular expressions, an attempt is made to actually parse the data into a DateTime object.  This will catch cases like `"2013-02-31"` which look correct but do not correspond to real-world values.  Note that this bears a computation penalty.

### COERCIONS

The date types will coerce from:

- " Num "

  The number is treated as a time in seconds since the unix epoch

- " DateTime "

  The duration represented as a DateTime object.

- " Str "

  Non-expanded date and time string representations.

  e.g.:-

  20120113         =\> 2012-01-13 170500Z          =\> 17:05:00Z 20120113T170500Z =\> 2012-01-13T17:05:00Z

  Representations of UTC time zone (only an offset of zero is supported)

  e.g.:-

  17:05:00+00:00 =\> 17:05:00Z 17:05:00+00    =\> 17:05:00Z 170500+0000    =\> 17:05:00Z

  2012-01-13T17:05:00+00:00 =\> 2012-01-13T17:05:00Z 2012-01-13T17:05:00+00    =\> 2012-01-13T17:05:00Z 20120113T170500+0000      =\> 2012-01-13T17:05:00Z

  Also supports non-standards mixing of expanded and non-expanded representations

  e.g.:-

  2012-01-13T170500Z =\> 2012-01-13T17:05:00Z 20120113T17:05:00Z =\> 2012-01-13T17:05:00Z

  In addition, there are coercions from these string types to DateTime.

## DURATION CONSTRAINTS

### ISO8601DateDurationStr

An ISO8601 date duration string. E.g. `"P01Y01M01D"`

### ISO8601TimeDurationStr

An ISO8601 time duration string. E.g. `"PT01H01M01S"`

### ISO8601DateTimeDurationStr

An ISO8601 combined date and time duration string. E.g. `"P01Y01M01DT01H01M01S"`

### COERCIONS

The duration types will coerce from:

- " Num "

  The number is treated as a time in seconds

- " DateTime::Duration "

  The duration represented as a DateTime::Duration object.

The duration types will coerce to:

- " Duration "

  A DateTime::Duration, i.e. the `" Duration "` constraint from MooseX::Types::DateTime.

## FEATURES

### Fractional seconds

If provided, the number of seconds in time types is represented to microsecond accuracy. A full stop character is used as the decimal separator, which is allowed, but deprecated in preference to the comma character in *ISO 8601:2004*.

## LIMITATIONS

This module is probably full of bugs; patches are very welcome.

Specifically, there are missing features:

- •

  When no time-zone is specified, UTC is assumed. (Should floating timezone be used?)

- •

  No week number type

- •

  "Basic format", which lacks separator characters, is not supported for reading or writing.

- •

  Tests are rubbish.

## SEE ALSO

- •

  MooseX::Types::DateTime

- •

  DateTime

- •

  DateTime::Duration

- •

  DateTime::Format::ISO8601

- •

  DateTime::Format::Duration

- •

  \<http://en.wikipedia.org/wiki/ISO\_8601\>

- •

  \<http://dotat.at/tmp/ISO\_8601-2004\_E.pdf\>

## ACKNOWLEDGEMENTS

The development of this code was sponsored by my (Tom's) employer \<http://www.state51.com/\>.

## SUPPORT

Bugs may be submitted through the RT bug tracker \<https://rt.cpan.org/Public/Dist/Display.html?Name=MooseX-Types-ISO8601\> (or bug-MooseX-Types-ISO8601@rt.cpan.org \<mailto:bug-MooseX-Types-ISO8601@rt.cpan.org\>).

There is also a mailing list available for users of this distribution, at \<http://lists.perl.org/list/moose.html\>.

There is also an irc channel available for users of this distribution, at `"#moose"` on `"irc.perl.org"` \<irc://irc.perl.org/#moose\>.

## AUTHORS

- •

  Tomas Doran (t0m) \<bobtfish@bobtfish.net\>

- •

  Dave Lambley \<dlambley@cpan.org\>

## CONTRIBUTORS

- •

  Karen Etheridge \<ether@cpan.org\>

- •

  Dave Lambley \<dave@lambley.me.uk\>

- •

  zebardy \<zebardy@gmail.com\>

- •

  Gregory Oschwald \<goschwald@maxmind.com\>

- •

  Mark Fowler \<mark@twoshortplanks.com\>

## COPYRIGHT AND LICENCE

This software is copyright (c) 2009 by Tomas Doran.

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