diff --git a/lib/DateTime/Parse.pm6 b/lib/DateTime/Parse.pm6
index 307fdf0..7536c20 100644
--- a/lib/DateTime/Parse.pm6
+++ b/lib/DateTime/Parse.pm6
@@ -6,7 +6,13 @@ my class X::DateTime::CannotParse is Exception {
class DateTime::Parse is DateTime {
grammar DateTime::Parse::Grammar {
token TOP {
-
| | | | |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
}
token rfc3339-date {
@@ -21,6 +27,10 @@ class DateTime::Parse is DateTime {
}
+ token time3 {
+ <.SP>
+ }
+
token partial-time {
':' ':' ?
}
@@ -33,6 +43,10 @@ class DateTime::Parse is DateTime {
[ 'Z' | 'z' | ]
}
+ token time-offset2 {
+
+ }
+
token time-numoffset {
':'
}
@@ -53,6 +67,10 @@ class DateTime::Parse is DateTime {
<.wkday> ',' <.SP> <.SP> <.SP>
}
+ token rfc2822-date {
+ <.wkday> ',' <.SP> <.SP>
+ }
+
token rfc850-date {
<.weekday> ',' <.SP> <.SP> <.SP>
}
@@ -93,6 +111,10 @@ class DateTime::Parse is DateTime {
'-' '-'
}
+ token date6 { # e.g., 02 Jun 1982 or 2 Jun 1982
+ <.SP> <.SP>
+ }
+
token time {
':' ':'
}
@@ -147,6 +169,10 @@ class DateTime::Parse is DateTime {
make DateTime.new(|$.made, |$.made)
}
+ method rfc2822-date($/) {
+ make DateTime.new(|$.made, |$.made)
+ }
+
method rfc850-date($/) {
make DateTime.new(|$.made, |$.made)
}
@@ -192,6 +218,10 @@ class DateTime::Parse is DateTime {
self!genericDate($/);
}
+ method date6($/) { # e.g. 1996-12-19
+ self!genericDate($/);
+ }
+
my %timezones =
UTC => 0,
GMT => 0,
@@ -228,6 +258,16 @@ class DateTime::Parse is DateTime {
make %res;
}
+ method time3($/) {
+ my $p = $;
+ my $offset = 0;
+ if ~$ eq '-' {
+ $offset = 3600 * ~$.Int;
+ $offset += 60 * ~$.Int;
+ }
+ my %res = hour => ~$p, minute => ~$p, second => ~$p, timezone => -$offset;
+ make %res;
+ }
my %wkday = Mon => 0, Tue => 1, Wed => 2, Thu => 3, Fri => 4, Sat => 5, Sun => 6;
method wkday($/) {
make %wkday{~$/}
@@ -287,6 +327,7 @@ DateTime::Parse - DateTime parser
=head2 Available formats:
=item rfc1123
+=item rfc2822
=item rfc850
=item asctime
diff --git a/t/01-basic.t b/t/01-basic.t
index 3654467..5c41a4a 100644
--- a/t/01-basic.t
+++ b/t/01-basic.t
@@ -5,6 +5,7 @@ use DateTime::Parse;
plan *;
my $rfc1123 = 'Sun, 06 Nov 1994 08:49:37 GMT';
+my $rfc2822 = 'Sun, 06 Nov 1994 08:49:37 -0800';
my $bad = 'Bad, 06 Nov 1994 08:49:37 GMT';
my $rfc850 = 'Sunday, 06-Nov-94 08:49:37 GMT';
my $rfc850v = 'Sun 06-Nov-1994 08:49:37 GMT';
@@ -20,7 +21,11 @@ is DateTime::Parse.new('08:49:37', :rule).sort,
is DateTime::Parse.new($rfc1123),
DateTime.new(:year(1994), :month(11), :day(6), :hour(8), :minute(49), :second(37)),
'parse string gives correct DateTime object';
+is DateTime::Parse.new($rfc2822),
+ DateTime.new(:year(1994), :month(11), :day(6), :hour(8), :minute(49), :second(37), :timezone(-28800)),
+ 'parse string gives correct DateTime object';
ok DateTime::Parse::Grammar.parse($rfc1123), "'Sun, 06 Nov 1994 08:49:37 GMT' is recognized as rfc1123-date";
+ok DateTime::Parse::Grammar.parse($rfc2822), "'$rfc2822' is recognized as rfc2822-date";
throws-like qq[ DateTime::Parse.new('$bad') ], X::DateTime::CannotParse, invalid-str => $bad;
ok DateTime::Parse::Grammar.parse($rfc850), "'$rfc850' is recognized as rfc850-date";
nok DateTime::Parse::Grammar.parse($rfc850v), "'$rfc850v' is NOT recognized as rfc850-date";