.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{ . if \nF \{ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "MooseX::Types::ISO8601 3pm" .TH MooseX::Types::ISO8601 3pm "2015-08-16" "perl v5.20.2" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" MooseX::Types::ISO8601 \- ISO8601 date and duration string type constraints and coercions for Moose .SH "VERSION" .IX Header "VERSION" version 0.18 .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 4 \& use MooseX::Types::ISO8601 qw/ \& ISO8601DateTimeStr \& ISO8601TimeDurationStr \& /; \& \& has datetime => ( \& is => \*(Aqro\*(Aq, \& isa => ISO8601DateTimeStr, \& ); \& \& has duration => ( \& is => \*(Aqro\*(Aq, \& isa => ISO8601TimeDurationStr, \& coerce => 1, \& ); \& \& Class\->new( datetime => \*(Aq2012\-01\-01T00:00:00\*(Aq ); \& \& Class\->new( duration => 60 ); # 60s => PT00H01M00S \& Class\->new( duration => DateTime::Duration\->new(%args) ) .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" This module packages several TypeConstraints with coercions for working with \s-1ISO8601\s0 date strings and the DateTime suite of objects. .SH "DATE CONSTRAINTS" .IX Header "DATE CONSTRAINTS" .SS "ISO8601DateStr" .IX Subsection "ISO8601DateStr" An \s-1ISO8601\s0 date string. E.g. \f(CW\*(C`2009\-06\-11\*(C'\fR .SS "ISO8601TimeStr" .IX Subsection "ISO8601TimeStr" An \s-1ISO8601\s0 time string. E.g. \f(CW\*(C`12:06:34Z\*(C'\fR .SS "ISO8601DateTimeStr" .IX Subsection "ISO8601DateTimeStr" An \s-1ISO8601\s0 combined datetime string. E.g. \f(CW\*(C`2009\-06\-11T12:06:34Z\*(C'\fR .SS "ISO8601DateTimeTZStr" .IX Subsection "ISO8601DateTimeTZStr" An \s-1ISO8601\s0 combined datetime string with a fully specified timezone. E.g. \f(CW\*(C`2009\-06\-11T12:06:34+00:00\*(C'\fR .SS "ISO8601StrictDateStr" .IX Subsection "ISO8601StrictDateStr" .SS "ISO8601StrictTimeStr" .IX Subsection "ISO8601StrictTimeStr" .SS "ISO8601StrictDateTimeStr" .IX Subsection "ISO8601StrictDateTimeStr" .SS "ISO8601StrictDateTimeTZStr" .IX Subsection "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 \f(CW\*(C`2013\-02\-31\*(C'\fR which look correct but do not correspond to real-world values. Note that this bears a computation penalty. .SS "\s-1COERCIONS\s0" .IX Subsection "COERCIONS" The date types will coerce from: .ie n .IP """ Num """ 4 .el .IP "\f(CW Num \fR" 4 .IX Item " Num " The number is treated as a time in seconds since the unix epoch .ie n .IP """ DateTime """ 4 .el .IP "\f(CW DateTime \fR" 4 .IX Item " DateTime " The duration represented as a DateTime object. .ie n .IP """ Str """ 4 .el .IP "\f(CW Str \fR" 4 .IX Item " Str " Non-expanded date and time string representations. .Sp e.g.:\- .Sp 20120113 => 2012\-01\-13 170500Z => 17:05:00Z 20120113T170500Z => 2012\-01\-13T17:05:00Z .Sp Representations of \s-1UTC\s0 time zone (only an offset of zero is supported) .Sp e.g.:\- .Sp 17:05:00+00:00 => 17:05:00Z 17:05:00+00 => 17:05:00Z 170500+0000 => 17:05:00Z .Sp 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 .Sp Also supports non-standards mixing of expanded and non-expanded representations .Sp e.g.:\- .Sp 2012\-01\-13T170500Z => 2012\-01\-13T17:05:00Z 20120113T17:05:00Z => 2012\-01\-13T17:05:00Z .Sp In addition, there are coercions from these string types to DateTime. .SH "DURATION CONSTRAINTS" .IX Header "DURATION CONSTRAINTS" .SS "ISO8601DateDurationStr" .IX Subsection "ISO8601DateDurationStr" An \s-1ISO8601\s0 date duration string. E.g. \f(CW\*(C`P01Y01M01D\*(C'\fR .SS "ISO8601TimeDurationStr" .IX Subsection "ISO8601TimeDurationStr" An \s-1ISO8601\s0 time duration string. E.g. \f(CW\*(C`PT01H01M01S\*(C'\fR .SS "ISO8601DateTimeDurationStr" .IX Subsection "ISO8601DateTimeDurationStr" An \s-1ISO8601\s0 combined date and time duration string. E.g. \f(CW\*(C`P01Y01M01DT01H01M01S\*(C'\fR .SS "\s-1COERCIONS\s0" .IX Subsection "COERCIONS" The duration types will coerce from: .ie n .IP """ Num """ 4 .el .IP "\f(CW Num \fR" 4 .IX Item " Num " The number is treated as a time in seconds .ie n .IP """ DateTime::Duration """ 4 .el .IP "\f(CW DateTime::Duration \fR" 4 .IX Item " DateTime::Duration " The duration represented as a DateTime::Duration object. .PP The duration types will coerce to: .ie n .IP """ Duration """ 4 .el .IP "\f(CW Duration \fR" 4 .IX Item " Duration " A DateTime::Duration, i.e. the \f(CW\*(C` Duration \*(C'\fR constraint from MooseX::Types::DateTime. .SH "FEATURES" .IX Header "FEATURES" .SS "Fractional seconds" .IX Subsection "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 \&\fI\s-1ISO 8601:2004\s0\fR. .SH "BUGS" .IX Header "BUGS" Probably full of them, patches are very welcome. .PP Specifically missing features: .IP "\(bu" 4 No timezone support \- all times are assumed \s-1UTC\s0 .IP "\(bu" 4 No week number type .IP "\(bu" 4 \&\*(L"Basic format\*(R", which lacks separator characters, is not supported for reading or writing. .IP "\(bu" 4 Tests are rubbish. .SH "SEE ALSO" .IX Header "SEE ALSO" * MooseX::Types::DateTime * DateTime * DateTime::Duration * DateTime::Format::ISO8601 * DateTime::Format::Duration * * .SH "ACKNOWLEDGEMENTS" .IX Header "ACKNOWLEDGEMENTS" The development of this code was sponsored by my employer . .SH "AUTHORS" .IX Header "AUTHORS" .IP "\(bu" 4 Tomas Doran (t0m) .IP "\(bu" 4 Dave Lambley .SH "CONTRIBUTORS" .IX Header "CONTRIBUTORS" .IP "\(bu" 4 Karen Etheridge .IP "\(bu" 4 Dave Lambley .IP "\(bu" 4 zebardy .IP "\(bu" 4 Aaron Moses .IP "\(bu" 4 Gregory Oschwald .SH "COPYRIGHT AND LICENCE" .IX Header "COPYRIGHT AND LICENCE" This software is copyright (c) 2009 by Tomas Doran. .PP This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.