From 9a5a7db5423c27134ddef5aa62fc5e69c1e422da Mon Sep 17 00:00:00 2001 From: Sylvain Colinet Date: Fri, 18 Dec 2015 00:13:30 +0100 Subject: [PATCH] Add support for subseconds support in ISO 8601, see #126948 --- src/core/Temporal.pm | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/core/Temporal.pm b/src/core/Temporal.pm index ab4513539db..6f6cec2186b 100644 --- a/src/core/Temporal.pm +++ b/src/core/Temporal.pm @@ -256,7 +256,7 @@ my class DateTime does Dateish { } multi method new(Str $format, :$timezone is copy = 0, :&formatter=&default-formatter) { - $format ~~ /^ (\d**4) '-' (\d\d) '-' (\d\d) <[Tt]> (\d\d) ':' (\d\d) ':' (\d\d) (<[Zz]> || (<[\-\+]>) (\d\d) (':'? (\d\d))? )? $/ + $format ~~ /^ (\d**4) '-' (\d\d) '-' (\d\d) <[Tt]> (\d\d) ':' (\d\d) ':' (\d\d[<[\.,]>\d ** 1..6]?) (<[Zz]> || (<[\-\+]>) (\d\d) (':'? (\d\d))? )? $/ or X::Temporal::InvalidFormat.new( invalid-str => $format, target => 'DateTime', @@ -468,7 +468,11 @@ my class DateTime does Dateish { } method Str() { - &!formatter(self) + if $!second.floor == $!second { + &!formatter(self) + } else { + &!formatter === &default-formatter ?? &!formatter(self, :subseconds) !! &!formatter(self); + } } multi method perl(DateTime:D:) {