diff --git a/chronos.cabal b/chronos.cabal
--- a/chronos.cabal
+++ b/chronos.cabal
@@ -2,7 +2,7 @@
 name:
   chronos
 version:
-  1.0.8
+  1.0.9
 synopsis:
   A performant time library
 description:
diff --git a/src/Chronos.hs b/src/Chronos.hs
--- a/src/Chronos.hs
+++ b/src/Chronos.hs
@@ -1,16 +1,14 @@
 {-# language
-        BangPatterns
-      , CPP
-      , DeriveGeneric
-      , GeneralizedNewtypeDeriving
-      , MagicHash
-      , MultiParamTypeClasses
-      , OverloadedStrings
-      , RecordWildCards
-      , ScopedTypeVariables
-      , TypeFamilies
-      , TypeInType
-      , UnboxedTuples
+    BangPatterns
+  , CPP
+  , DeriveGeneric
+  , GeneralizedNewtypeDeriving
+  , MultiParamTypeClasses
+  , OverloadedStrings
+  , ScopedTypeVariables
+  , TypeFamilies
+  , TypeInType
+  , UnboxedTuples
   #-}
 
 {-| Chronos is a performance-oriented time library for Haskell, with a
@@ -85,6 +83,7 @@
   , slash
   , hyphen
   , compact
+  , timeParts
     -- ** Months
   , january
   , february
@@ -237,26 +236,26 @@
   , DatetimeLocale(..)
   , MeridiemLocale(..)
   , TimeInterval(..)
+  , TimeParts(..)
   ) where
 
-import Data.Text (Text)
-import Data.Vector (Vector)
-import Data.Attoparsec.Text (Parser)
+import Control.Applicative
+import Control.Exception (evaluate)
 import Control.Monad
+import Data.Aeson (FromJSON,ToJSON,FromJSONKey,ToJSONKey)
+import Data.Attoparsec.Text (Parser)
+import Data.ByteString (ByteString)
+import Data.Char (isDigit)
 import Data.Foldable
-import Control.Applicative
+import Data.Hashable (Hashable)
 import Data.Int (Int64)
-import Data.Char (isDigit)
-import Data.ByteString (ByteString)
-import Torsor (add,difference,scale,plus)
-import Data.Word (Word64, Word8)
-import Torsor
-import GHC.Generics (Generic)
-import Data.Aeson (FromJSON,ToJSON,FromJSONKey,ToJSONKey)
 import Data.Primitive
+import Data.Text (Text)
+import Data.Vector (Vector)
+import Data.Word (Word64, Word8)
 import Foreign.Storable
-import Data.Hashable (Hashable)
-import Control.Exception (evaluate)
+import GHC.Generics (Generic)
+import Torsor
 import qualified Data.Aeson as AE
 import qualified Data.Aeson.Encoding as AEE
 import qualified Data.Aeson.Types as AET
@@ -2660,3 +2659,37 @@
 aesonParserOffset t = case decodeOffset OffsetFormatColonOn t of
   Nothing -> fail "could not parse Offset"
   Just x -> pure x
+
+-- | Holds all of the parts encoded by a 'Time'.
+--   Can be used for formatting if what is presently in the API
+--   does not suffice.
+data TimeParts = TimeParts
+  { timePartsDay :: !Int -- ^ days 0-31
+  , timePartsMonth :: !Int -- ^ months 0-11
+  , timePartsYear :: !Int
+  , timePartsHour :: !Int -- ^ hours 0-23
+  , timePartsMinute :: !Int -- ^ minutes 0-59
+  , timePartsSecond :: !Int -- ^ seconds 0-59
+  , timePartsSubsecond :: !Int -- ^ fraction of a second with nanosecond resolution
+  , timePartsOffset :: !Int
+  }
+  deriving (Eq, Read, Show)
+
+-- | Deconstruct a 'Time' into its 'TimeParts'.
+timeParts :: Offset -> Time -> TimeParts
+timeParts o0 t0 =
+  let
+    OffsetDatetime (Datetime dt t) o = timeToOffsetDatetime o0 t0
+    Date y mo d = dt
+    TimeOfDay h mi s = t
+    (wholeSeconds, subsecond) = divMod s 100000000
+  in TimeParts
+    { timePartsDay = fromIntegral (getDayOfMonth d)
+    , timePartsMonth = fromIntegral (getMonth mo)
+    , timePartsYear = fromIntegral (getYear y)
+    , timePartsHour = h
+    , timePartsMinute = mi
+    , timePartsSecond = fromIntegral wholeSeconds
+    , timePartsSubsecond = fromIntegral subsecond
+    , timePartsOffset = getOffset o
+    }
diff --git a/src/Chronos/Types.hs b/src/Chronos/Types.hs
--- a/src/Chronos/Types.hs
+++ b/src/Chronos/Types.hs
@@ -52,6 +52,7 @@
   , DatetimeLocale(..)
   , MeridiemLocale(..)
   , TimeInterval(..)
+  , TimeParts(..)
   ) where
 
 import Chronos
