diff --git a/composite-aeson.cabal b/composite-aeson.cabal
--- a/composite-aeson.cabal
+++ b/composite-aeson.cabal
@@ -3,7 +3,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           composite-aeson
-version:        0.5.2.0
+version:        0.5.3.0
 synopsis:       JSON for Vinyl/Frames records
 description:    Integration between Aeson and Vinyl/Frames records allowing records to be easily converted to JSON using automatic derivation, explicit formats, or a mix of both.
 category:       Records
@@ -93,6 +93,7 @@
     , composite-aeson
     , hspec
   other-modules:
+      DateTimeSpec
       EnumSpec
       FieldSpec
       RecordSpec
diff --git a/src/Composite/Aeson/Formats/DateTime.hs b/src/Composite/Aeson/Formats/DateTime.hs
--- a/src/Composite/Aeson/Formats/DateTime.hs
+++ b/src/Composite/Aeson/Formats/DateTime.hs
@@ -67,16 +67,16 @@
 iso8601DateTimeJsonFormat =
   dateTimeJsonFormat defaultTimeLocale (withMs :| [withoutMs])
   where
-    withMs    = DateTimeFormat "%FT%T.%Q%z" "yyyy-mm-ddThh:mm:ss.sssZ" fixupTzIn (fixupTzOut . fixupMs)
-    withoutMs = DateTimeFormat "%FT%T%z"    "yyyy-mm-ddThh:mm:ssZ"     fixupTzIn fixupTzOut
+    withMs    = DateTimeFormat "%FT%T%Q%z" "yyyy-mm-ddThh:mm:ss.sssZ" fixupTzIn (fixupTzOut . fixupMs)
+    withoutMs = DateTimeFormat "%FT%T%z"   "yyyy-mm-ddThh:mm:ssZ"     fixupTzIn fixupTzOut
 
 -- |ISO8601 extended time format (@hh:mm:ss.sss@ or @hh:mm:ss@)
 iso8601TimeJsonFormat :: JsonFormat e TimeOfDay
 iso8601TimeJsonFormat =
   dateTimeJsonFormat defaultTimeLocale (withMs :| [withoutMs])
   where
-    withMs    = DateTimeFormat "%T.%Q%z" "hh:mm:ss.sss" id fixupMs
-    withoutMs = DateTimeFormat "%T.%Q"   "hh:mm:ss"     id id
+    withMs    = DateTimeFormat "%T%Q%z" "hh:mm:ss.sss" id fixupMs
+    withoutMs = DateTimeFormat "%T%Q"   "hh:mm:ss"     id id
 
 
 -- |Monad for capturing uses of 'fail', because @Data.Time.Format@ has a poorly factored interface.
diff --git a/test/DateTimeSpec.hs b/test/DateTimeSpec.hs
new file mode 100644
--- /dev/null
+++ b/test/DateTimeSpec.hs
@@ -0,0 +1,21 @@
+module DateTimeSpec where
+
+import Composite.Aeson (parseJsonWithFormat', toJsonWithFormat)
+import Composite.Aeson.Formats.DateTime (iso8601DateTimeJsonFormat)
+import Data.Aeson.Types (parseEither)
+import Data.Aeson.QQ (aesonQQ)
+import Data.Time.Calendar (Day(ModifiedJulianDay))
+import Data.Time.Clock (UTCTime(UTCTime))
+import Test.Hspec (Spec, describe, it, shouldBe)
+
+
+testDate :: UTCTime
+testDate = UTCTime (ModifiedJulianDay 58025) (fromRational 72151.986)
+
+dateTimeSuite :: Spec
+dateTimeSuite = do
+  describe "Composite.Aeson.Formats.DateTime" $ do
+    it "encodes ISO8601 date time format for a test date" $
+      toJsonWithFormat iso8601DateTimeJsonFormat testDate `shouldBe` [aesonQQ|"2017-09-29T20:02:31.986+0000"|]
+    it "decodes ISO8601 date time format for a test date" $
+      parseEither (parseJsonWithFormat' iso8601DateTimeJsonFormat) [aesonQQ|"2017-09-29T20:02:31.986+0000"|] `shouldBe` Right testDate
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -1,5 +1,6 @@
 import Test.Hspec (hspec)
 
+import DateTimeSpec (dateTimeSuite)
 import EnumSpec (enumSuite)
 import RecordSpec (recordSuite)
 import THSpec (thSuite)
@@ -7,6 +8,7 @@
 
 main :: IO ()
 main = hspec $ do
+  dateTimeSuite
   enumSuite
   recordSuite
   thSuite
