diff --git a/chronos.cabal b/chronos.cabal
--- a/chronos.cabal
+++ b/chronos.cabal
@@ -1,7 +1,29 @@
 name:                chronos
-version:             0.3
-synopsis:            A time library, encoding, decoding, and instances
-description:         Please see README.md
+version:             0.4
+synopsis:            A performant time library
+description:
+  Performance-oriented time library for haskell. The main differences
+  between this and "time" are that this library:
+  .
+  * Uses machine integers where possible. This means that some time-related
+    arithmetic should be faster. It also means that the types are incapable
+    of representing times that are very far in the future or the past.
+  .
+  * Provides "ToJSON" and "FromJSON" instances for json serialization.
+  .
+  * Provides "Unbox" instances for working with unboxed vectors.
+  .
+  * Uses normal non-overloaded haskell functions for encoding and decoding time. It provides
+    "attoparsec" parsers for both "Text" and "ByteString". Additionally, it
+    provides functions for encoding time as "Text" or "ByteString". The "time"
+    library uses accomplishes these with the "Data.Time.Format" module,
+    which uses UNIX-style datetime format strings. It is expected that
+    the approach taken in this library is faster and catches more mistakes
+    at compile time at the cost of being less expressive.
+  .
+  * Only provides nanosecond resolution instead of picosecond resolution.
+
+
 homepage:            https://github.com/andrewthad/chronos#readme
 license:             BSD3
 license-file:        LICENSE
@@ -10,7 +32,6 @@
 copyright:           2016 Andrew Martin
 category:            web
 build-type:          Simple
--- extra-source-files:
 cabal-version:       >=1.10
 
 library
@@ -38,16 +59,18 @@
     , Chronos.Posix
     , Chronos.Month
     , Chronos.Locale.English.Text
-    -- , Chronos.Calendar.Text
   build-depends:
-      base >= 4.7 && < 5
-    , vector
-    , text
-    , bytestring
-    , attoparsec
-    , aeson
-    , hashable
-    , primitive
+      base >= 4.8 && < 5
+    , vector >= 0.11 && < 0.13
+    , text >= 1.2 && < 1.3
+    , bytestring >= 0.10 && < 0.11
+    , attoparsec >= 0.13 && < 0.14
+    -- Remove support for aeson < 1.0 after the newer
+    -- aeson lands in stackage. Currently, ToJSONKey
+    -- and FromJSONKey instances cannot be added.
+    , aeson >= 0.11 && < 1.1
+    , hashable >= 1.2 && < 1.3
+    , primitive >= 0.6 && < 0.7
   default-language:    Haskell2010
 
 test-suite chronos-test
diff --git a/src/Chronos/Day.hs b/src/Chronos/Day.hs
--- a/src/Chronos/Day.hs
+++ b/src/Chronos/Day.hs
@@ -4,6 +4,8 @@
   , today
   , tomorrow
   , yesterday
+  , toDate
+  , fromDate
   ) where
 
 import Chronos.Types
@@ -30,4 +32,10 @@
 
 yesterday :: IO Day
 yesterday = fmap (add (-1) . Posix.truncateToDay) Posix.now
+
+fromDate :: Date -> Day
+fromDate = Conv.dateToDay
+
+toDate :: Day -> Date
+toDate = Conv.dayToDate
 
diff --git a/src/Chronos/Posix.hs b/src/Chronos/Posix.hs
--- a/src/Chronos/Posix.hs
+++ b/src/Chronos/Posix.hs
@@ -14,6 +14,7 @@
   , fromDatetime
   , fromOffsetDatetime
   , truncateToDay
+  , fromDay
   ) where
 
 import Chronos.Types
@@ -69,7 +70,11 @@
 fromOffsetDatetime = fromUtc . Conv.offsetDatetimeToUtcTime
 
 truncateToDay :: PosixTime -> Day
-truncateToDay (PosixTime i) = Day (fromIntegral (div i 86400000000000))
+truncateToDay (PosixTime i) = Day (fromIntegral (div i 86400000000000) + 40587)
+
+-- | The 'PosixTime' at midnight on the given day.
+fromDay :: Day -> PosixTime
+fromDay (Day d) = PosixTime (fromIntegral (d - 40587) * 86400000000000)
 
 -- | Convert a 'PosixTime' to a UTC 'Datetime'.
 -- toDatetime :: PosixTime -> Datetime
diff --git a/src/Chronos/Types.hs b/src/Chronos/Types.hs
--- a/src/Chronos/Types.hs
+++ b/src/Chronos/Types.hs
@@ -70,15 +70,15 @@
 import Data.Primitive
 import Control.Monad
 import GHC.Generics (Generic)
-import qualified Data.Vector.Generic            as GVector
-import qualified Data.Vector.Unboxed            as UVector
-import qualified Data.Vector.Primitive          as PVector
-import qualified Data.Vector.Generic.Mutable    as MGVector
+import qualified Data.Vector.Generic as GVector
+import qualified Data.Vector.Unboxed as UVector
+import qualified Data.Vector.Primitive as PVector
+import qualified Data.Vector.Generic.Mutable as MGVector
 
 -- | A day represented as the modified Julian date, the number of days
 --   since midnight on November 17, 1858.
 newtype Day = Day { getDay :: Int }
-  deriving (Show,Read,Eq,Ord,Hashable,Enum)
+  deriving (Show,Read,Eq,Ord,Hashable,Enum,ToJSON,FromJSON)
 
 -- | The day of the week.
 newtype DayOfWeek = DayOfWeek { getDayOfWeek :: Int }
