Parses iso8601 formats
use DateTime::Format::ISO8601; my $dt = DateTime::Format::ISO8601->parse_datetime( $str ); my $dt = DateTime::Format::ISO8601->parse_time( $str ); or my $iso8601 = DateTime::Format::ISO8601->new; my $dt = $iso8601->parse_datetime( $str ); my $dt = $iso8601->parse_time( $str );
Parses almost all \s-1ISO8601\s0 date and time formats. \s-1ISO8601\s0 time-intervals will be supported in a later release.
This module accepts no arguments to it's \*(C`import\*(C' method.
Constructors
new( ... ) Accepts an optional hash. my $iso8601 = DateTime::Format::ISO8601->new( base_datetime => $dt, cut_off_year => 42, legacy_year => 1, );
base_datetime A \*(C`DateTime\*(C' object that will be used to fill in missing information from incomplete date/time formats. This key is optional.
cut_off_year A integer representing the cut-off point between interpreting 2-digits years as 19xx or 20xx. 2-digit years < legacy_year will be interpreted as 20xx 2-digit years >= legacy_year will be untreated as 19xx This key defaults to the value of \*(C`DefaultCutOffYear\*(C'.
legacy_year A boolean value controlling if a 2-digit year is interpreted as being in the current century (unless a \*(C`base_datetime\*(C' is set) or if \*(C`cut_off_year\*(C' should be used to place the year in either 20xx or 19xx. This key defaults to the value of \*(C`DefaultLegacyYear\*(C'.
clone Returns a replica of the given object.
Object Methods
base_datetime Returns a \*(C`DateTime\*(C' object if a \*(C`base_datetime\*(C' has been set.
set_base_datetime( object => $object ) Accepts a \*(C`DateTime\*(C' object that will be used to fill in missing information from incomplete date/time formats.
cut_off_year Returns a integer representing the cut-off point between interpreting 2-digits years as 19xx or 20xx.
set_cut_off_year( $int ) Accepts a integer representing the cut-off point between interpreting 2-digits years as 19xx or 20xx. 2-digit years < legacy_year will be interpreted as 20xx 2-digit years >= legacy_year will be interpreted as 19xx
legacy_year Returns a boolean value indicating the 2-digit year handling behavior.
set_legacy_year( $bool ) Accepts a boolean value controlling if a 2-digit year is interpreted as being in the current century (unless a \*(C`base_datetime\*(C' is set) or if \*(C`cut_off_year\*(C' should be used to place the year in either 20xx or 19xx.
Class Methods
DefaultCutOffYear( $int ) Accepts a integer representing the cut-off point for 2-digit years when calling \*(C`parse_*\*(C' as class methods and the default value for \*(C`cut_off_year\*(C' when creating objects. If called with no parameters this method will return the default value for \*(C`cut_off_year\*(C'.
DefaultLegacyYear( $bool ) Accepts a boolean value controlling the legacy year behavior when calling \*(C`parse_*\*(C' as class methods and the default value for \*(C`legacy_year\*(C' when creating objects. If called with no parameters this method will return the default value for \*(C`legacy_year\*(C'.
Parser(s)
These may be called as either class or object methods.
parse_datetime
parse_time Please see the \*(L"\s-1FORMATS\s0\*(R" section.
There are 6 string that can match against date only or time only formats. The \*(C`parse_datetime\*(C' method will attempt to match these ambiguous strings against date only formats. If you want to match against the time only formats see the \*(C`parse_time\*(C' method.
Expanded \s-1ISO8601\s0 These formats are supported with exactly 6 digits for the year. Support for a variable number of digits will be in a later release.
Precision If a format doesn't include a year all larger time unit up to and including the year are filled in using the current date/time or [if set] the \*(C`base_datetime\*(C' object.
Fractional time There is no limit on the expressed precision.
The supported formats are listed by the section of \s-1ISO\s0 8601:2000(E) in which they appear.
5.2 Dates
5.2.1.1
YYYYMMDD YYYY-MM-DD
5.2.1.2
YYYY-MM YYYY YY
5.2.1.3
YYMMDD YY-MM-DD -YYMM -YY-MM -YY --MMDD --MM-DD --MM ---DD
5.2.1.4
+[YY]YYYYMMDD +[YY]YYYY-MM-DD +[YY]YYYY-MM +[YY]YYYY +[YY]YY
5.2.2.1
YYYYDDD YYYY-DDD
5.2.2.2
YYDDD YY-DDD -DDD
5.2.2.3
+[YY]YYYYDDD +[YY]YYYY-DDD
5.3.2.1
YYYYWwwD YYYY-Www-D
5.2.3.2
YYYYWww YYYY-Www YYWwwD YY-Www-D YYWww YY-Www -YWwwD -Y-Www-D -YWww -Y-Www -WwwD -Www-D -Www -W-D
5.2.3.4
+[YY]YYYYWwwD +[YY]YYYY-Www-D +[YY]YYYYWww +[YY]YYYY-Www
5.3 Time of Day
5.3.1.1 - 5.3.1.3
optionally prefixed with 'T'
5.3.1.1
hh:mm:ss
5.3.1.2
hh:mm
5.3.1.3 - 5.3.1.4
fractional (decimal) separator maybe either ',' or '.'
5.3.1.3
hhmmss,ss hh:mm:ss,ss hhmm,mm hh:mm,mm hh,hh
5.3.1.4
-mm:ss -mmss,s -mm:ss,s -mm,m --ss,s
5.3.3 - 5.3.4.2
optionally prefixed with 'T'
5.3.3
hhmmssZ hh:mm:ssZ hhmmZ hh:mmZ hhZ hhmmss.ssZ hh:mm:ss.ssZ
5.3.4.2
hhmmss[+-]hhmm hh:mm:ss[+-]hh:mm hhmmss[+-]hh hh:mm:ss[+-]hh hhmmss.ss[+-]hhmm hh:mm:ss.ss[+-]hh:mm
5.4 Combinations of date and time of day
5.4.1
YYYYMMDDThhmmss YYYY-MM-DDThh:mm:ss YYYYMMDDThhmmssZ YYYY-MM-DDThh:mm:ssZ YYYYMMDDThhmmss[+-]hhmm YYYY-MM-DDThh:mm:ss[+-]hh:mm YYYYMMDDThhmmss[+-]hh YYYY-MM-DDThh:mm:ss[+-]hh
5.4.2
YYYYMMDDThhmmss.ss YYYY-MM-DDThh:mm:ss.ss YYYYMMDDThhmmss.ss[+-]hhmm YYYY-MM-DDThh:mm:ss.ss[+-]hh:mm
Support for this section is not complete.
YYYYMMDDThhmm YYYY-MM-DDThh:mm YYYYDDDThhmmZ YYYY-DDDThh:mmZ YYYYWwwDThhmm[+-]hhmm YYYY-Www-DThh:mm[+-]hh
5.5 Time-Intervals
Will be supported in a later release.
5.3.1.1 - 5.3.1.3
optionally prefixed with 'T'
5.3.1.1
hhmmss
5.3.1.2
hhmm hh
5.3.1.4
-mmss -mm --ss
ISO8601:2000(E) Data elements and interchange formats - information exchange - Representation of dates and times Second edition 2000-12-15
ISO/TC 154 N 362
Iain 'Spoon' Truskett (\s-1SPOON\s0) who wrote DateTime::Format::Builder. That has grown into The Vacuum Energy Powered \*(C`Swiss Army\*(C' Katana of date and time parsing. This module was inspired by and conceived in honor of Iain's work.
Tom Phoenix (\s-1PHOENIX\s0) and \s-1PDX\s0.pm for helping me solve the \s-1ISO\s0 week conversion bug. Not by fixing the code but motivation me to fix it so I could participate in a game of \*(C`Zendo\*(C'.
Jonathan Leffler (\s-1JOHNL\s0) for reporting a test bug.
Kelly McCauley for a patch to add 8 missing formats.
Alasdair Allan (\s-1AALLAN\s0) for complaining about excessive test execution time.
Everyone at the DateTime \*(C`Asylum\*(C'.
Support for this module is provided via the <[email protected]> email list. See <http://lists.perl.org/> for more details.
Joshua Hoblitt <[email protected]>
Copyright (c) 2003-2005 Joshua Hoblitt. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
The full text of the licenses can be found in the \s-1LICENSE\s0 file included with this module, or in perlartistic and perlgpl as supplied with Perl 5.8.1 and later.
DateTime, DateTime::Format::Builder, <http://datetime.perl.org/>