Obliczanie daty w przyszłości lub przeszłości

Haskell:
Obliczanie daty w przyszłości lub przeszłości

How to: | Jak to zrobić:

W Haskellu używamy biblioteki time do pracy z datami. Oto przykład dodawania dni do aktualnej daty:

import Data.Time

addDaysToCurrent :: Integer -> IO Day
addDaysToCurrent n = do
    today <- getCurrentTime
    let nDaysAfter = addDays n . utctDay $ today
    return nDaysAfter

main :: IO ()
main = do
    futureDate <- addDaysToCurrent 10
    print futureDate

Przykładowe wyjście:

2023-04-25

Aby obliczyć datę w przeszłości, odejmujemy dni:

subtractDaysFromCurrent :: Integer -> IO Day
subtractDaysFromCurrent n = do
    today <- getCurrentTime
    let nDaysBefore = addDays (-n) . utctDay $ today
    return nDaysBefore

main :: IO ()
main = do
    pastDate <- subtractDaysFromCurrent 10
    print pastDate

Przykładowe wyjście:

2023-04-05

Deep Dive | Wnikliwa analiza:

Obliczanie dat w Haskellu wykorzystuje bibliotekę time, która jest standardem od momentu jej wprowadzenia w GHC 6.8. Jest ona inspirowana biblioteką Joda-Time z Javy. Alternatywy jak old-time są obecnie rzadziej używane.

Kluczowe typy danych to UTCTime, Day, TimeOfDay. Istnieje też spora gama funkcji jak addDays czy diffUTCTime dla operacji na datach.

Zarządzanie czasem jest niebanalne przez strefy czasowe i zmiany czasu (Daylight Saving Time). Biblioteka time radzi sobie z tymi zagadnieniami, lecz w praktyce brane są też inne biblioteki jak timezone-series czy timezone-olson.

See Also | Zobacz również: