@@ -34,20 +34,18 @@ module Data.Aeson.Encode.Builder
3434 , ascii5
3535 ) where
3636
37−import Data.Aeson.Functions (fromPico)
37+import Data.Aeson.Internal.Time
3838import Data.Aeson.Types.Internal (Encoding(..), Value(..))
3939import Data.ByteString.Builder as B
4040import Data.ByteString.Builder.Prim as BP
4141import Data.ByteString.Builder.Scientific (scientificBuilder)
4242import Data.Char (chr, ord)
43−import Data.Int (Int64)
4443import Data.Monoid ((<>))
4544import Data.Scientific (Scientific, base10Exponent, coefficient)
46−import Data.Time (DiffTime, UTCTime(..))
45+import Data.Time (UTCTime(..))
4746import Data.Time.Calendar (Day(..), toGregorian)
4847import Data.Time.LocalTime
4948import Data.Word (Word8)
50−import Unsafe.Coerce (unsafeCoerce)
5149import qualified Data.HashMap.Strict as HMS
5250import qualified Data.Text as T
5351import qualified Data.Text.Encoding as TE
@@ -225,19 +223,6 @@ utcTime :: UTCTime -> B.Builder
225223utcTime (UTCTime d s) = dayTime d (diffTimeOfDay64 s) <> B.char7 'Z'
226224{-# INLINE utcTime #-}
227225
228−data TimeOfDay64 = TOD {-# UNPACK #-} !Int
229− {-# UNPACK #-} !Int
230− {-# UNPACK #-} !Int64
231−
232−diffTimeOfDay64 :: DiffTime -> TimeOfDay64
233−diffTimeOfDay64 t = TOD (fromIntegral h) (fromIntegral m) s
234− where (h,mp) = fromIntegral pico `quotRem` 3600000000000000
235− (m,s) = mp `quotRem` 60000000000000
236− pico = unsafeCoerce t :: Integer
237−
238−toTimeOfDay64 :: TimeOfDay -> TimeOfDay64
239−toTimeOfDay64 (TimeOfDay h m s) = TOD h m (fromIntegral (fromPico s))
240−
241226localTime :: LocalTime -> Builder
242227localTime (LocalTime d t) = dayTime d (toTimeOfDay64 t)
243228{-# INLINE localTime #-}