Ok。
したがって、...Z
記法が Servant as によって適切に解析されるUTCTime
とすぐに、別のキャプチャ行を作成しました。
:<|> "myendpoint" :> Capture "zt" ZonedTime :> ...
:<|> "myendpoint" :> Capture "utct" UTCTime :> ...
そして、対応するハンドラを作成しました。このリテラルを使用すると、+xx:xx
get が取得されZonedTime
て 1 つのハンドラーに移動し、リテラルZ
が 2 行目に取得されて 2 番目のハンドラーに移動します。これは最初のハンドラーと同じですが、オンザフライに変換UTC
されます。Zoned
アップデート
私のシステムがどのように機能しているかが、URL で文字列のエンコード時間にさまざまなバリエーションがある可能性があるという事実につながることを理解するようになりました。
- タイムゾーンとして、
+03:00
またはZ
UTCの場合があります。
- 私はのような小数秒を持っているかもしれません
2016-12-09T15:04:26.349857693845+05:00
標準Capture
の forは、タイムゾーンとしても小数秒としてZonedTime
も理解していません。Z
だから、別の回答で提案されているように、私はどういうわけか方向にしました。
Capturing ラインを 1 つだけ入れます
"daymonth" :> Capture "zt" ZonedTime' :> Capture "fl" Double :> Get '[JSON] Value
そして私は新しいタイプを作りZonedTime'
ます。それは私のためにすべてをやっています。
newtype ZonedTime' = ZonedTime' { unwrap :: ZonedTime }
instance FromHttpApiData ZonedTime' where
parseUrlPiece text = Right zt
where
strRaw = unpack text
str = subRegex (mkRegex "Z$") strRaw "+00:00"
zt = ZonedTime' (parseTimeOrError False defaultTimeLocale "%Y-%m-%dT%H:%M:%S%Q%z" str)
Z
私は問題に対処し、それを+00:00
%Q
次に、秒の小数部分をキャッチするフォーマット文字列を指定して、文字列の解析を手動で記述します。