Get current year / month / day in Haskell

Problem:

Using haskell, you want to get the current year, month and day (for the UTC time zone) as integral values.

Solution

You need the time package for this task. Use cabal install time to install.

Our code is similar to this HaskellWiki entry, however it provides a standalone runnable program (use runghc <filename>.hs to execute) which is more readable for beginners.

UTC time:

Note that the UTC time might differ from your local time depending on your timezone.

import Data.Time.Clock
import Data.Time.Calendar

main = do
    now <- getCurrentTime
    let (year, month, day) = toGregorian $ utctDay now
    putStrLn $ "Year: " ++ show year
    putStrLn $ "Month: " ++ show month
    putStrLn $ "Day: " ++ show day

Local time:

It is also possible to get your current local time using your system’s default timezone:

import Data.Time.Clock
import Data.Time.Calendar
import Data.Time.LocalTime

main = do
    now <- getCurrentTime
    timezone <- getCurrentTimeZone
    let zoneNow = utcToLocalTime timezone now
    let (year, month, day) = toGregorian $ localDay zoneNow
    putStrLn $ "Year: " ++ show year
    putStrLn $ "Month: " ++ show month
    putStrLn $ "Day: " ++ show day

Daylight saving time is also taken into account using this method.