diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,6 @@
+# hpqtypes-1.4.3 (2015-10-09)
+* remove invalid FromSQL ZonedTime instance
+
 # hpqtypes-1.4.2 (2015-06-08)
 * use strict StateT for DBT
 * use catch in withTransaction only if it might be used
diff --git a/hpqtypes.cabal b/hpqtypes.cabal
--- a/hpqtypes.cabal
+++ b/hpqtypes.cabal
@@ -1,5 +1,5 @@
 name:                hpqtypes
-version:             1.4.2
+version:             1.4.3
 synopsis:            Haskell bindings to libpqtypes
 
 description:         Efficient and easy-to-use bindings to (slightly modified)
diff --git a/src/Database/PostgreSQL/PQTypes/FromSQL.hs b/src/Database/PostgreSQL/PQTypes/FromSQL.hs
--- a/src/Database/PostgreSQL/PQTypes/FromSQL.hs
+++ b/src/Database/PostgreSQL/PQTypes/FromSQL.hs
@@ -133,13 +133,20 @@
 
 -- TIMESTAMPTZ
 
+-- | 'FromSQL' instance for 'ZonedTime' doesn't exist because
+-- PostgreSQL doesn't provide zone offset information when returning
+-- timestamps with time zone in a binary format.
 instance FromSQL UTCTime where
   type PQBase UTCTime = PGtimestamp
-  fromSQL = localToZoned localTimeToUTC
-
-instance FromSQL ZonedTime where
-  type PQBase ZonedTime = PGtimestamp
-  fromSQL = localToZoned (flip ZonedTime)
+  fromSQL Nothing = unexpectedNULL
+  fromSQL jts@(Just PGtimestamp{..}) = do
+    localTime <- fromSQL jts
+    case rest of
+      0 -> return . localTimeToUTC (minutesToTimeZone mins) $ localTime
+      _ -> hpqTypesError $ "Invalid gmtoff: " ++ show gmtoff
+    where
+      gmtoff = pgTimeGMTOff pgTimestampTime
+      (mins, rest) = fromIntegral gmtoff `divMod` 60
 
 -- BOOL
 
@@ -176,15 +183,3 @@
     mins = fromIntegral pgTimeMin
     sec  = fromIntegral pgTimeSec
     usec = fromIntegral pgTimeUSec
-
--- | Helper for converting local time to either 'ZonedTime' or 'UTCTime'.
-localToZoned :: (TimeZone -> LocalTime -> a) -> Maybe PGtimestamp -> IO a
-localToZoned _ Nothing = unexpectedNULL
-localToZoned construct jts@(Just PGtimestamp{..}) = do
-  localTime <- fromSQL jts
-  case rest of
-    0 -> return . construct (minutesToTimeZone mins) $ localTime
-    _ -> hpqTypesError $ "Invalid gmtoff: " ++ show gmtoff
-  where
-    gmtoff = pgTimeGMTOff pgTimestampTime
-    (mins, rest) = fromIntegral gmtoff `divMod` 60
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -364,7 +364,6 @@
   , nullTest td (u::TimeOfDay)
   , nullTest td (u::LocalTime)
   , nullTest td (u::UTCTime)
-  , nullTest td (u::ZonedTime)
   , nullTest td (u::Array1 Int32)
   , nullTest td (u::Array2 Double)
   , nullTest td (u::Composite Simple)
@@ -392,7 +391,6 @@
   , putGetTest td 10000 (u::TimeOfDay) eqTOD
   , putGetTest td 500000 (u::LocalTime) eqLT
   , putGetTest td 500000 (u::UTCTime) eqUTCT
-  , putGetTest td 500000 (u::ZonedTime) eqZT
   , putGetTest td 1000 (u::Array1 Int32) (==)
   , putGetTest td 1000 (u::Array2 Double) eqArray2
   , putGetTest td 100000 (u::Composite Simple) (==)
