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

module Utils.DateTime where

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


instance Eq ZonedTime where
  == :: ZonedTime -> ZonedTime -> Bool
(==) ZonedTime
x ZonedTime
y = (ZonedTime -> LocalTime
zonedTimeToLocalTime ZonedTime
x LocalTime -> LocalTime -> Bool
forall a. Eq a => a -> a -> Bool
== ZonedTime -> LocalTime
zonedTimeToLocalTime ZonedTime
y) Bool -> Bool -> Bool
&&
             (ZonedTime -> TimeZone
zonedTimeZone ZonedTime
x TimeZone -> TimeZone -> Bool
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 = LocalTime -> LocalTime -> Ordering
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) = Day -> String
forall a. Show a => a -> String
show Day
date String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"T" String -> String -> String
forall a. [a] -> [a] -> [a]
++ TimeOfDay -> String
forall a. Show a => a -> String
show TimeOfDay
time String -> String -> String
forall a. [a] -> [a] -> [a]
++
                                    Int -> String -> String
forall a. Int -> [a] -> [a]
take Int
3 (TimeZone -> String
forall a. Show a => a -> String
show TimeZone
offset) String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
":" String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String -> String
forall a. Int -> [a] -> [a]
drop Int
3 (TimeZone -> String
forall a. Show a => a -> String
show TimeZone
offset)