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.