diff --git a/classy-influxdb-simple.cabal b/classy-influxdb-simple.cabal
--- a/classy-influxdb-simple.cabal
+++ b/classy-influxdb-simple.cabal
@@ -1,5 +1,5 @@
 name:                classy-influxdb-simple
-version:             0.2.0.0
+version:             0.2.1.0
 synopsis:            Super simple InfluxDB package in Classy-MTL style
 -- description:
 homepage:            https://github.com/mankyKitty/classy-influxdb-simple#readme
@@ -18,6 +18,7 @@
   exposed-modules:     Database.InfluxDB.Simple.Classy
                      , Database.InfluxDB.Simple.Classy.Types
                      , Database.InfluxDB.Simple.Classy.Types.Precision
+                     , Database.InfluxDB.Simple.Classy.Types.InfluxTimeStamp
   build-depends:       base >= 4.7 && < 5
                      , wreq
                      , lens
@@ -27,6 +28,8 @@
                      , text
                      , async-io-either
                      , vector
+                     , time
+                     , scientific
   default-language:    Haskell2010
 
 source-repository head
diff --git a/src/Database/InfluxDB/Simple/Classy/Types.hs b/src/Database/InfluxDB/Simple/Classy/Types.hs
--- a/src/Database/InfluxDB/Simple/Classy/Types.hs
+++ b/src/Database/InfluxDB/Simple/Classy/Types.hs
@@ -11,11 +11,11 @@
   , HasInfluxDBConfig (..)
   , InfluxDbError (..)
   , AsInfluxDbError (..)
-  , Precision (..)
-  , AsPrecision (..)
   , CanInflux
   , basicInfluxOpts
   , rqWinCode
+  , module Database.InfluxDB.Simple.Classy.Types.Precision
+  , module Database.InfluxDB.Simple.Classy.Types.InfluxTimeStamp
   ) where
 
 import           Control.Exception                               (SomeException)
@@ -44,6 +44,7 @@
 
 import           Database.InfluxDB.Simple.Classy.Types.Precision (AsPrecision (..),
                                                                   Precision (..))
+import Database.InfluxDB.Simple.Classy.Types.InfluxTimeStamp
 -- |
 -- Used to differentiate what action we were trying to perform on the InfluxDB
 -- when an error occurred.
diff --git a/src/Database/InfluxDB/Simple/Classy/Types/InfluxTimeStamp.hs b/src/Database/InfluxDB/Simple/Classy/Types/InfluxTimeStamp.hs
new file mode 100644
--- /dev/null
+++ b/src/Database/InfluxDB/Simple/Classy/Types/InfluxTimeStamp.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE DeriveGeneric         #-}
+{-# LANGUAGE FlexibleInstances     #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE TypeFamilies #-}
+module Database.InfluxDB.Simple.Classy.Types.InfluxTimeStamp
+  ( InfluxTimeStamp (..)
+  ) where
+
+import           Control.Applicative ((<|>))
+import           Control.Lens        (makeWrapped, (^.))
+import           GHC.Generics        (Generic)
+
+import           Data.Monoid         ((<>))
+
+import           Data.Text           (Text)
+import qualified Data.Text           as T
+import Data.Text.Lens (packed,unpacked)
+
+import           Data.Time           (UTCTime)
+import qualified Data.Time           as T
+
+import           Data.Aeson          (FromJSON (..), ToJSON (..))
+import qualified Data.Aeson          as A
+import           Data.Aeson.Types    (typeMismatch)
+import           Data.Scientific     (FPFormat (Fixed), Scientific,
+                                      formatScientific)
+
+secondFmt :: String
+secondFmt = "%s"
+
+rfcFmt :: String
+rfcFmt = "%FT%TZ"
+
+-- |
+-- Wrapper class for @UTCTime@ so we can provide some easier handling of
+-- Influx timestamps coming in and out of the DB.
+--
+-- The @FromJSON@ instance can handle the following response granuality/format:
+-- * seconds
+-- * nanoseconds
+-- * string format matching @2016-07-12T00:00:00Z@
+--
+-- The @ToJSON@ instance will print the time as epoch seconds
+newtype InfluxTimeStamp = InfluxTimeStamp UTCTime
+  deriving (Show, Eq, Generic)
+makeWrapped ''InfluxTimeStamp
+
+parseT
+  :: String
+  -> String
+  -> Maybe UTCTime
+parseT =
+  T.parseTimeM False T.defaultTimeLocale
+
+-- Time could be a timestamp "2016-07-12T00:00:00Z"
+parseInfluxTSString
+  :: Text
+  -> Maybe UTCTime
+parseInfluxTSString =
+  parseT rfcFmt
+    . T.unpack
+
+-- Time could be a scientific nanosecond accurate value
+parseInfluxTS
+  :: Scientific
+  -> Maybe UTCTime
+parseInfluxTS =
+  parseT secondFmt
+   . formatScientific Fixed (Just 0)
+
+toInfluxTS
+  :: ( Show a
+     , Monad m
+     )
+  => a
+  -> Maybe UTCTime
+  -> m InfluxTimeStamp
+toInfluxTS a = maybe
+  (fail ("Parse failed for InfluxTimeStamp: " <> show a))
+  (pure . InfluxTimeStamp)
+
+instance ToJSON InfluxTimeStamp where
+  toEncoding (InfluxTimeStamp t) =
+    toEncoding $ T.formatTime T.defaultTimeLocale secondFmt t
+
+instance FromJSON InfluxTimeStamp where
+  parseJSON (A.String t) = toInfluxTS t $ parseInfluxTSString t
+  parseJSON (A.Number n) = toInfluxTS n $ nanos <|> seconds
+    where
+      nanos = parseInfluxTS (n / 1000000000)
+      seconds = parseInfluxTS n
+
+  parseJSON invalidVal = typeMismatch "InfluxTimeStamp" invalidVal
diff --git a/src/Database/InfluxDB/Simple/Classy/Types/Precision.hs b/src/Database/InfluxDB/Simple/Classy/Types/Precision.hs
--- a/src/Database/InfluxDB/Simple/Classy/Types/Precision.hs
+++ b/src/Database/InfluxDB/Simple/Classy/Types/Precision.hs
@@ -5,9 +5,10 @@
 module Database.InfluxDB.Simple.Classy.Types.Precision
   ( Precision (..)
   , AsPrecision (..)
+  , defaultPrecision
   ) where
 
-import           Control.Lens         (Lens', Prism', makeClassyPrisms, preview,
+import           Control.Lens         (Iso', Prism', makeClassyPrisms, preview,
                                        prism', re, view, (^?))
 
 import           Data.ByteString      (ByteString)
@@ -49,7 +50,7 @@
     )
 
 {-# INLINABLE pris' #-}
-pris' :: Lens' a String -> Lens' String a -> Prism' a Precision
+pris' :: Iso' a String -> Iso' String a -> Prism' a Precision
 pris' f t = prism' (view (re _Precision . t)) (preview (f . _Precision))
 
 instance AsPrecision Text where
@@ -60,3 +61,8 @@
 
 instance Show Precision where
   show = view (re _Precision)
+
+defaultPrecision
+  :: Precision
+defaultPrecision =
+  Seconds
