{-# OPTIONS_GHC -fno-warn-orphans #-}

module Bookhound.Utils.DateTime where

import Data.Time (LocalTime (..), ZonedTime (..))


instance Eq ZonedTime where
  == :: ZonedTime -> ZonedTime -> Bool
(==) ZonedTime
x ZonedTime
y = (ZonedTime -> LocalTime
zonedTimeToLocalTime ZonedTime
x forall a. Eq a => a -> a -> Bool
== ZonedTime -> LocalTime
zonedTimeToLocalTime ZonedTime
y) Bool -> Bool -> Bool
&&
             (ZonedTime -> TimeZone
zonedTimeZone ZonedTime
x forall a. Eq a => a -> a -> Bool
== ZonedTime -> TimeZone
zonedTimeZone ZonedTime
y)

instance Ord ZonedTime where
  compare :: ZonedTime -> ZonedTime -> Ordering
compare ZonedTime
x ZonedTime
y = forall a. Ord a => a -> a -> Ordering
compare (ZonedTime -> LocalTime
zonedTimeToLocalTime ZonedTime
x) (ZonedTime -> LocalTime
zonedTimeToLocalTime ZonedTime
y)


showDateTime :: ZonedTime -> String
showDateTime :: ZonedTime -> String
showDateTime (ZonedTime (LocalTime Day
date TimeOfDay
time) TimeZone
offset) =
  forall a. Show a => a -> String
show Day
date forall a. Semigroup a => a -> a -> a
<> String
"T" forall a. Semigroup a => a -> a -> a
<> forall a. Show a => a -> String
show TimeOfDay
time
  forall a. Semigroup a => a -> a -> a
<> forall a. Int -> [a] -> [a]
take Int
3 (forall a. Show a => a -> String
show TimeZone
offset) forall a. Semigroup a => a -> a -> a
<> String
":" forall a. Semigroup a => a -> a -> a
<> forall a. Int -> [a] -> [a]
drop Int
3 (forall a. Show a => a -> String
show TimeZone
offset)