Fix RDF.DateTime to support 24:00:00 as valid time
This commit is contained in:
parent
71dc3d5acc
commit
cae8e183e0
3 changed files with 22 additions and 0 deletions
|
@ -17,6 +17,12 @@ This project adheres to [Semantic Versioning](http://semver.org/) and
|
||||||
from the XPath and SPARQL specs on `RDF.Boolean`
|
from the XPath and SPARQL specs on `RDF.Boolean`
|
||||||
|
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- `RDF.DateTime`: '24:00:00' is a valid time in a xsd:dateTime; the dateTime
|
||||||
|
value so represented is the first instant of the following day
|
||||||
|
|
||||||
|
|
||||||
[Compare v0.4.1...HEAD](https://github.com/marcelotto/rdf-ex/compare/v0.4.1...HEAD)
|
[Compare v0.4.1...HEAD](https://github.com/marcelotto/rdf-ex/compare/v0.4.1...HEAD)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,20 @@ defmodule RDF.DateTime do
|
||||||
_ -> super(value, opts)
|
_ -> super(value, opts)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
{:error, :invalid_time} ->
|
||||||
|
if String.contains?(value, "T24:00:00") do
|
||||||
|
with [day, tz] <- String.split(value, "T24:00:00", parts: 2),
|
||||||
|
{:ok, day} <- Date.from_iso8601(day)
|
||||||
|
do
|
||||||
|
"#{day |> Date.add(1) |> Date.to_string()}T00:00:00#{tz}"
|
||||||
|
|> convert(opts)
|
||||||
|
else
|
||||||
|
_ -> super(value, opts)
|
||||||
|
end
|
||||||
|
|
||||||
|
else
|
||||||
|
super(value, opts)
|
||||||
|
end
|
||||||
_ ->
|
_ ->
|
||||||
super(value, opts)
|
super(value, opts)
|
||||||
end
|
end
|
||||||
|
|
|
@ -16,6 +16,8 @@ defmodule RDF.DateTimeTest do
|
||||||
"2010-01-01T00:00:00+00:00" => { dt( "2010-01-01T00:00:00Z") , "2010-01-01T00:00:00+00:00", "2010-01-01T00:00:00Z" },
|
"2010-01-01T00:00:00+00:00" => { dt( "2010-01-01T00:00:00Z") , "2010-01-01T00:00:00+00:00", "2010-01-01T00:00:00Z" },
|
||||||
"2010-01-01T01:00:00+01:00" => { dt( "2010-01-01T00:00:00Z") , "2010-01-01T01:00:00+01:00", "2010-01-01T00:00:00Z" },
|
"2010-01-01T01:00:00+01:00" => { dt( "2010-01-01T00:00:00Z") , "2010-01-01T01:00:00+01:00", "2010-01-01T00:00:00Z" },
|
||||||
"2009-12-31T23:00:00-01:00" => { dt( "2010-01-01T00:00:00Z") , "2009-12-31T23:00:00-01:00", "2010-01-01T00:00:00Z" },
|
"2009-12-31T23:00:00-01:00" => { dt( "2010-01-01T00:00:00Z") , "2009-12-31T23:00:00-01:00", "2010-01-01T00:00:00Z" },
|
||||||
|
"2009-12-31T24:00:00" => { dt( "2010-01-01T00:00:00") , "2009-12-31T24:00:00" , "2010-01-01T00:00:00" },
|
||||||
|
"2009-12-31T24:00:00+00:00" => { dt( "2010-01-01T00:00:00Z") , "2009-12-31T24:00:00+00:00", "2010-01-01T00:00:00Z" },
|
||||||
# TODO: DateTime doesn't support negative years (at least with the iso8601 conversion functions)
|
# TODO: DateTime doesn't support negative years (at least with the iso8601 conversion functions)
|
||||||
# "-2010-01-01T00:00:00Z" => { dt("-2010-01-01T00:00:00Z") , nil, "-2010-01-01T00:00:00Z" },
|
# "-2010-01-01T00:00:00Z" => { dt("-2010-01-01T00:00:00Z") , nil, "-2010-01-01T00:00:00Z" },
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in a new issue