on master help sign in
Fix instance of ToJSON for ZonedTime
commitdc8de16b82bf5f7d5a88d5b59677d50b00cdfb36 authorBryan O'Sullivan <bos@serpentine.com> dateMon 18 Nov 2013, 22:43 (13 years ago) parent69248f5
1 file changed+6−5
Data/Aeson/Types/Instances.hs+6−5
Data/Aeson/Types/Instances.hs+6−5
@@ -66,7 +66,7 @@ import Data.Monoid (Dual(..), First(..), Last(..), mappend)
6666import Data.Ratio (Ratio, (%), numerator, denominator)
6767import Data.Text (Text, pack, unpack)
6868import Data.Time (UTCTime, ZonedTime(..), TimeZone(..))
69−import Data.Time.Format (formatTime, parseTime)
69+import Data.Time.Format (FormatTime, formatTime, parseTime)
7070import Data.Traversable (traverse)
7171import Data.Vector (Vector)
7272import Data.Word (Word, Word8, Word16, Word32, Word64)
@@ -454,9 +454,8 @@ instance FromJSON Value where
454454
455455instance ToJSON DotNetTime where
456456 toJSON (DotNetTime t) =
457− String (pack (secs ++ msecs ++ ")/"))
457+ String (pack (secs ++ formatMillis t ++ ")/"))
458458 where secs = formatTime defaultTimeLocale "/Date(%s" t
459− msecs = take 3 $ formatTime defaultTimeLocale "%q" t
460459 {-# INLINE toJSON #-}
461460
462461instance FromJSON DotNetTime where
@@ -471,12 +470,14 @@ instance FromJSON DotNetTime where
471470instance ToJSON ZonedTime where
472471 toJSON t = String $ pack $ formatTime defaultTimeLocale format t
473472 where
474− format = "%FT%T" ++ milliseconds ++ tzFormat
475− milliseconds = take 4 $ formatTime defaultTimeLocale "%Q" t
473+ format = "%FT%T." ++ formatMillis t ++ tzFormat
476474 tzFormat
477475 | 0 == timeZoneMinutes (zonedTimeZone t) = "Z"
478476 | otherwise = "%z"
479477
478+formatMillis :: (FormatTime t) => t -> String
479+formatMillis t = take 3 . formatTime defaultTimeLocale "%q" $ t
480+
480481instance FromJSON ZonedTime where
481482 parseJSON (String t) =
482483 tryFormats alternateFormats