diff --git a/hydrogen-util.cabal b/hydrogen-util.cabal
--- a/hydrogen-util.cabal
+++ b/hydrogen-util.cabal
@@ -1,5 +1,5 @@
 name:                 hydrogen-util
-version:              0.6
+version:              0.7
 homepage:             https://github.com/scravy/hydrogen-util
 synopsis:             Hydrogen Tools
 license:              BSD3
@@ -23,7 +23,7 @@
                       , Hydrogen.Util.Read
   build-depends:      base ==4.7.*
                       , containers ==0.5.*
-                      , hydrogen-prelude ==0.6.0.1
+                      , hydrogen-prelude ==0.7
                       , parsec ==3.1.*
                       , time ==1.4.*
   hs-source-dirs:     src
diff --git a/src/Hydrogen/Util/Parsec.hs b/src/Hydrogen/Util/Parsec.hs
--- a/src/Hydrogen/Util/Parsec.hs
+++ b/src/Hydrogen/Util/Parsec.hs
@@ -5,6 +5,7 @@
   , Parser
   , SomethingBad
   , Tokens
+  , runTokenParser
   , mkError
   , sourceToken
   , manyBetween
@@ -25,6 +26,9 @@
 
 mkError :: ParseError -> Either SomethingBad b
 mkError e = Left (errorPos e, map messageString (errorMessages e))
+
+runTokenParser :: (Stream a Identity t) => ParsecT a () Identity b -> Parser a b
+runTokenParser p = either mkError Right . runIdentity . runParserT p () ""
 
 sourceToken :: (Show t, Stream (Tokens t) m (SourcePos, t))
     => (t -> Maybe a)
diff --git a/src/Hydrogen/Util/Read.hs b/src/Hydrogen/Util/Read.hs
--- a/src/Hydrogen/Util/Read.hs
+++ b/src/Hydrogen/Util/Read.hs
@@ -3,7 +3,6 @@
 module Hydrogen.Util.Read where
 
 import Hydrogen.Prelude
-import Hydrogen.Prelude.Extra
 
 import Data.Time.Calendar.OrdinalDate
 
@@ -78,7 +77,7 @@
     date = "([0-9]{4})-?([0-9]{2})-?([0-9]{2})"
     time = "([0-9]{2}):?([0-9]{2})(:?([0-9]{2})(\\.[0-9]{1,12})?)?"
     timeZone = "(Z|[+-]([0-9]{1,2})(:?([0-9]{2}))?)"
-    dateTime = concat [date, "T?", time, timeZone]
+    dateTime = concat ["^", date, "T?", time, timeZone, "$"]
 
 tryReadDate :: String -> Maybe (Maybe Day)
 tryReadDate xs = case xs =~ date of
@@ -92,7 +91,7 @@
 
     _ -> Nothing
   where
-    date = "([0-9]{4})-(([0-9]{2})-([0-9]{2})|([0-9]{3}))"
+    date = "^([0-9]{4})-(([0-9]{2})-([0-9]{2})|([0-9]{3}))$"
 
 tryReadTime :: String -> Maybe (Maybe TimeOfDay)
 tryReadTime xs = case xs =~ time of
@@ -102,7 +101,7 @@
 
     _ -> Nothing
   where
-    time = "([0-9]{2}):([0-9]{2})(:([0-9]{2}))?"
+    time = "^([0-9]{2}):([0-9]{2})(:([0-9]{2}))?$"
 
 tryReadBool :: String -> Maybe Bool
 tryReadBool = \case
