packages feed

hodatime-1.1.0.0: src/Data/HodaTime/Pattern/OffsetDateTime.hs

-----------------------------------------------------------------------------
-- |
-- Module      :  Data.HodaTime.Pattern.OffsetDateTime
-- Copyright   :  (C) 2017 Jason Johnson
-- License     :  BSD-style (see the file LICENSE)
-- Maintainer  :  Jason Johnson <jason.johnson.081@gmail.com>
-- Stability   :  experimental
-- Portability :  POSIX, Windows
--
-- Patterns for an 'Data.HodaTime.OffsetDateTime.OffsetDateTime' — a
-- 'Data.HodaTime.CalendarDateTime.CalendarDateTime' pinned by a fixed UTC 'Data.HodaTime.Offset.Offset' — rendered as
-- @yyyy-MM-ddTHH:mm:ss(+\/-)HH:mm@.  Build your own with @offsetDateTimePattern@ from a date-time pattern and an offset
-- pattern.
----------------------------------------------------------------------------
{-# LANGUAGE FlexibleContexts #-}
module Data.HodaTime.Pattern.OffsetDateTime
(
  -- * Standard Patterns
   pOffsetDateTime
  -- * Custom Patterns
  --
  -- | Build an 'OffsetDateTime' pattern from a 'CalendarDateTime' pattern and an 'Offset' pattern.
  ,offsetDateTimePattern
)
where

import Data.HodaTime.Pattern.Internal (Pattern, pairP)
import Data.HodaTime.Pattern.CalendarDateTime (ps)
import Data.HodaTime.Pattern.Offset (pOffset)
import Data.HodaTime.OffsetDateTime (OffsetDateTime, offset, toCalendarDateTime, fromCalendarDateTimeWithOffset)
import Data.HodaTime.CalendarDateTime (CalendarDateTime)
import Data.HodaTime.CalendarDateTime.Internal (IsCalendar, Month)
import Data.HodaTime.Offset (Offset)

-- | Join a Gregorian-or-other 'CalendarDateTime' pattern to an 'Offset' pattern, producing an 'OffsetDateTime'
--   pattern.  The date\/time text comes first, immediately followed by the offset text.
offsetDateTimePattern
  :: IsCalendar cal
  => Pattern (CalendarDateTime cal -> CalendarDateTime cal) (CalendarDateTime cal -> String) String
  -> Pattern (Offset -> Offset) (Offset -> String) String
  -> Pattern (OffsetDateTime cal -> OffsetDateTime cal) (OffsetDateTime cal -> String) String
offsetDateTimePattern = pairP toCalendarDateTime offset fromCalendarDateTimeWithOffset

-- | The ISO-8601 offset date/time pattern, @yyyy-MM-ddTHH:mm:ss±HH:mm@ (e.g. @2024-04-23T09:00:00+02:00@).
pOffsetDateTime :: (IsCalendar cal, Enum (Month cal)) => Pattern (OffsetDateTime cal -> OffsetDateTime cal) (OffsetDateTime cal -> String) String
pOffsetDateTime = offsetDateTimePattern ps pOffset