diff --git a/Data/MBox.hs b/Data/MBox.hs
--- a/Data/MBox.hs
+++ b/Data/MBox.hs
@@ -20,6 +20,7 @@
 import Prelude hiding (tail, init, last, minimum, maximum, foldr1, foldl1, (!!), read)
 import Control.Arrow
 import Data.Char
+import Data.Maybe
 import Data.Time
 import Safe
 import qualified Data.Text.Lazy as T
@@ -31,7 +32,22 @@
 
 -- | Reads a date header as a UTCTime
 parseDateHeader :: T.Text -> Maybe UTCTime
-parseDateHeader = parseTime LC.defaultTimeLocale  "%A, %B %e, %Y %l:%M %p" . T.unpack
+parseDateHeader txt = listToMaybe . catMaybes $ map tryParse formats where
+  header = T.unpack txt
+  tryParse f = parseTime LC.defaultTimeLocale f header
+  formats =
+    [ "%a, %_d %b %Y %T %z"
+    , "%a, %_d %b %Y %T %Z"
+    , "%a, %d %b %Y %T %z"
+    , "%a, %d %b %Y %T %Z"
+    , "%a, %_d %b %Y %T %z (%Z)"
+    , "%a, %_d %b %Y %T %z (GMT%:-z)"
+    , "%a, %_d %b %Y %T %z (UTC%:-z)"
+    , "%a, %_d %b %Y %T %z (GMT%:z)"
+    , "%a, %_d %b %Y %T %z (UTC%:z)"
+    , "%A, %B %e, %Y %l:%M %p"
+    , "%e %b %Y %T %z"
+    ]
 
 -- | Attempts to retrieve the contents of a forwarded message from an enclosing message.
 parseForward :: Message -> Message
@@ -95,5 +111,5 @@
 isDate (x, _) = x == T.pack "Date"
 
 -- | Return the values of headers for which predicate is True
-getHeader :: (Header -> Bool) -> Message -> T.Text
-getHeader predFunc = snd . head . filter predFunc . headers
+getHeader :: (Header -> Bool) -> Message -> [T.Text]
+getHeader predFunc = map snd . filter predFunc . headers
diff --git a/Data/MBox/String.hs b/Data/MBox/String.hs
--- a/Data/MBox/String.hs
+++ b/Data/MBox/String.hs
@@ -19,6 +19,7 @@
 import Control.Arrow
 import Data.List (isPrefixOf)
 import Data.Char
+import Data.Maybe
 import Data.Time
 import Safe
 import qualified Data.Time.Locale.Compat as LC
@@ -29,8 +30,23 @@
 
 -- | Reads a date header as a UTCTime
 parseDateHeader :: String -> Maybe UTCTime
-parseDateHeader = parseTime LC.defaultTimeLocale  "%A, %B %e, %Y %l:%M %p"
+parseDateHeader header = listToMaybe . catMaybes $ map tryParse formats where
+  tryParse f = parseTime LC.defaultTimeLocale f header
+  formats =
+    [ "%a, %_d %b %Y %T %z"
+    , "%a, %_d %b %Y %T %Z"
+    , "%a, %d %b %Y %T %z"
+    , "%a, %d %b %Y %T %Z"
+    , "%a, %_d %b %Y %T %z (%Z)"
+    , "%a, %_d %b %Y %T %z (GMT%:-z)"
+    , "%a, %_d %b %Y %T %z (UTC%:-z)"
+    , "%a, %_d %b %Y %T %z (GMT%:z)"
+    , "%a, %_d %b %Y %T %z (UTC%:z)"
+    , "%A, %B %e, %Y %l:%M %p"
+    , "%e %b %Y %T %z"
+    ]
 
+
 -- | Attempts to retrieve the contents of a forwarded message from an enclosing message.
 parseForward :: Message -> Message
 parseForward origMsg@(Message f _ b) =
@@ -90,5 +106,5 @@
 isDate :: Header -> Bool
 isDate (x, _y) = x == "Date"
 
-getHeader :: (Header -> Bool) -> Message -> String
-getHeader p = snd . head . filter p . headers
+getHeader :: (Header -> Bool) -> Message -> [String]
+getHeader p = map snd . filter p . headers
diff --git a/mbox.cabal b/mbox.cabal
--- a/mbox.cabal
+++ b/mbox.cabal
@@ -1,5 +1,5 @@
 name:                mbox
-version:             0.3.1
+version:             0.3.3
 synopsis:            Read and write standard mailbox files.
 description:         Read and write standard mailbox (mboxrd) files.
 category:            system, text, data
@@ -13,7 +13,7 @@
 Cabal-Version:       >= 1.6
 
 library
-  build-depends:     base >= 4, base < 6, safe, time < 1.6, time-locale-compat, text
+  build-depends:     base >= 4, base < 6, safe, time < 1.7, time-locale-compat, text
   exposed-modules:   Data.MBox, Data.MBox.String
   ghc-options:       -Wall
 
