@hackage lens-datetime0.1.1

Lenses for Data.Time.* types

The lens-datetime library provides a unified lens based accessors to the various types in Data.Time.Clock, Data.Time.Calendar and Data.Time.LocalTime.

Demonstration of basic uses.

import Control.Lens
import Data.Time
import Data.Time.Lens

aDay :: Day
aDay = fromGregorian 2013 08 22

aLocal :: LocalTime
aLocal = LocalTime aDay (TimeOfDay 13 45 28)

aUTC :: UTCTime
aUTC = UTCTime aDay 7458.9

You can then do the following:

> aLocal ^. year
2013
> aUTC ^. month
8
> aLocal & time .~ midnight
2013-08-22 00:00:00
> aUTC & day .~ 1 & month .~ 1
2013-01-01 02:04:18.9 UTC

You can manipulate the date-time values with proper roll-over behavior via the FlexibleDateTime mechanism:

> aLocal & flexDT.month +~ 12
2014-08-22 13:45:28
> aUTC & flexDT.day +~ 100
2013-11-30 02:04:18.9 UTC
> aLocal & flexDT.minute +~ 120
2013-08-22 15:45:28
> aLocal & flexDT %~ ((day +~ 7) . (hour +~ 2))
2013-08-22 13:45:28