data DateError = DateError String Nat deriving (Eq, Show)
Erreur de parsing : message + position (index du caractère).
import Data.Timedata DateError = DateError String Nat deriving (Eq, Show)daysFromCivil : Int -> Int -> Int -> IntcivilFromDays : Int -> (Int, Int, Int)isLeapYear : Int -> BooldaysInMonth : Int -> Int -> Intdate : Int -> Int -> Int -> Maybe LocalDatelocalDateOfEpochDay : Int -> LocalDateepochDay : LocalDate -> Intyear : LocalDate -> Intmonth : LocalDate -> Intday : LocalDate -> IntdayOfWeek : LocalDate -> IntplusDays : LocalDate -> Int -> LocalDateplusMonths : LocalDate -> Int -> LocalDateplusYears : LocalDate -> Int -> LocalDatedaysBetween : LocalDate -> LocalDate -> Intperiod : Int -> Int -> Int -> PeriodperiodYears : Period -> IntperiodMonths : Period -> IntperiodDays : Period -> IntplusPeriod : LocalDate -> Period -> LocalDatelocalTime : Int -> Int -> Int -> Int -> Maybe LocalTimemidnight : LocalTimenanoOfDay : LocalTime -> Inthour : LocalTime -> Intminute : LocalTime -> Intsecond : LocalTime -> IntnanoOf : LocalTime -> IntlocalDateTime : LocalDate -> LocalTime -> LocalDateTimetoLocalDate : LocalDateTime -> LocalDatetoLocalTime : LocalDateTime -> LocalTimeutc : ZoneOffsetzoneOffsetSeconds : Int -> Maybe ZoneOffsetzoneOffset : Int -> Int -> Maybe ZoneOffsetoffsetSeconds : ZoneOffset -> IntinstantOfEpochSecond : Int -> InstantinstantOfEpochNanos : Int -> InstantepochSecond : Instant -> IntnanoOfSecond : Instant -> InttoEpochNanos : Instant -> Intnanos : Int -> Durationmillis : Int -> Durationseconds : Int -> Durationminutes : Int -> Durationhours : Int -> DurationdurationDays : Int -> DurationdurationNanos : Duration -> IntdurationSeconds : Duration -> Intplus : Instant -> Duration -> Instantminus : Instant -> Duration -> Instantdiff : Instant -> Instant -> DurationaddDuration : Duration -> Duration -> DurationnegateDuration : Duration -> DurationatOffset : Instant -> ZoneOffset -> OffsetDateTimetoInstant : OffsetDateTime -> InstantoffsetLocalDateTime : OffsetDateTime -> LocalDateTimeoffsetZone : OffsetDateTime -> ZoneOffsetformatLocalDate : LocalDate -> StringformatLocalTime : LocalTime -> StringformatOffset : ZoneOffset -> StringformatLocalDateTime : LocalDateTime -> StringformatOffsetDateTime : OffsetDateTime -> StringformatInstant : Instant -> StringparseLocalDate : String -> Result DateError LocalDateparseLocalTime : String -> Result DateError LocalTimeparseLocalDateTime : String -> Result DateError LocalDateTimeparseOffsetDateTime : String -> Result DateError OffsetDateTimeparseInstant : String -> Result DateError Instantnow : Instant with ClockmonotonicNanos : Int with Clockdata DateError = DateError String Nat deriving (Eq, Show)
Erreur de parsing : message + position (index du caractère).
daysFromCivil : Int -> Int -> Int -> Int
(année, mois 1..12, jour 1..31) → jour-de-l'époque (1970-01-01 = 0).
civilFromDays : Int -> (Int, Int, Int)
jour-de-l'époque → (année, mois 1..12, jour 1..31).
isLeapYear : Int -> Bool
Année bissextile (proleptique grégorien) — vrai aussi pour les années ≤ 0.
daysInMonth : Int -> Int -> Int
Nombre de jours du mois (1..12) de l'année donnée.
date : Int -> Int -> Int -> Maybe LocalDate
Construit une date, en VALIDANT (rejette mois ∉ [1,12], jour invalide tel que 2026-02-30 ou 2023-02-29).
localDateOfEpochDay : Int -> LocalDate
La date du jour-de-l'époque donné (toujours valide).
epochDay : LocalDate -> Int
year : LocalDate -> Int
month : LocalDate -> Int
day : LocalDate -> Int
dayOfWeek : LocalDate -> Int
Jour de la semaine : 0 = dimanche … 6 = samedi (1970-01-01 était un jeudi = 4).
plusDays : LocalDate -> Int -> LocalDate
plusMonths : LocalDate -> Int -> LocalDate
Ajoute des mois en CLAMPANT le jour à la fin du mois cible (31 janv + 1 mois = 28/29 févr), à la java.time.
plusYears : LocalDate -> Int -> LocalDate
daysBetween : LocalDate -> LocalDate -> Int
Différence en jours entiers (a - b).
period : Int -> Int -> Int -> Period
periodYears : Period -> Int
periodMonths : Period -> Int
periodDays : Period -> Int
plusPeriod : LocalDate -> Period -> LocalDate
Ajoute un Period : années+mois combinés (clampés), PUIS jours (java.time).
localTime : Int -> Int -> Int -> Int -> Maybe LocalTime
Construit une heure murale, en VALIDANT (heure ∈ [0,23], minute/seconde ∈ [0,59] — pas de seconde intercalaire 23:59:60 —, nano ∈ [0, 1e9)).
midnight : LocalTime
nanoOfDay : LocalTime -> Int
hour : LocalTime -> Int
minute : LocalTime -> Int
second : LocalTime -> Int
nanoOf : LocalTime -> Int
localDateTime : LocalDate -> LocalTime -> LocalDateTime
toLocalDate : LocalDateTime -> LocalDate
toLocalTime : LocalDateTime -> LocalTime
utc : ZoneOffset
zoneOffsetSeconds : Int -> Maybe ZoneOffset
Décalage à partir d'un total de secondes (validé ±18:00).
zoneOffset : Int -> Int -> Maybe ZoneOffset
Décalage à partir d'heures SIGNÉES + minutes (magnitude 0..59).
offsetSeconds : ZoneOffset -> Int
instantOfEpochSecond : Int -> Instant
instantOfEpochNanos : Int -> Instant
epochSecond : Instant -> Int
Secondes (planchées) depuis l'époque.
nanoOfSecond : Instant -> Int
Nanosecondes dans la seconde, [0, 1e9).
toEpochNanos : Instant -> Int
nanos : Int -> Duration
millis : Int -> Duration
seconds : Int -> Duration
minutes : Int -> Duration
hours : Int -> Duration
durationDays : Int -> Duration
Un jour de DURÉE = 86 400 s FIXES (machine, ≠ un jour civil).
durationNanos : Duration -> Int
durationSeconds : Duration -> Int
plus : Instant -> Duration -> Instant
minus : Instant -> Duration -> Instant
diff : Instant -> Instant -> Duration
a diff b = a - b (en Duration).
addDuration : Duration -> Duration -> Duration
negateDuration : Duration -> Duration
atOffset : Instant -> ZoneOffset -> OffsetDateTime
Vue civile d'un instant sous un décalage donné.
toInstant : OffsetDateTime -> Instant
Reconvertit en instant absolu (soustrait le décalage).
offsetLocalDateTime : OffsetDateTime -> LocalDateTime
offsetZone : OffsetDateTime -> ZoneOffset
formatLocalDate : LocalDate -> String
formatLocalTime : LocalTime -> String
formatOffset : ZoneOffset -> String
formatLocalDateTime : LocalDateTime -> String
formatOffsetDateTime : OffsetDateTime -> String
formatInstant : Instant -> String
Formate un instant en UTC (…Z).
parseLocalDate : String -> Result DateError LocalDate
parseLocalTime : String -> Result DateError LocalTime
parseLocalDateTime : String -> Result DateError LocalDateTime
parseOffsetDateTime : String -> Result DateError OffsetDateTime
parseInstant : String -> Result DateError Instant
now : Instant with Clock
L'instant courant lu sur l'horloge MURALE de l'hôte — le temps CIVIL. Granularité milliseconde. Peut SAUTER (ajustements NTP, fuseau) : pour mesurer une durée, préfère monotonicNanos.
monotonicNanos : Int with Clock
Lecture de l'horloge MONOTONE, en nanosecondes depuis une origine non spécifiée. Elle ne décroît JAMAIS — c'est la source à utiliser pour les DURÉES (insensible aux sauts du temps civil). Seules les DIFFÉRENCES ont un sens : lis-la avant puis après, et soustrais.
t0 <- monotonicNanos … -- le calcul à mesurer t1 <- monotonicNanos -- t1 - t0 = durée en nanosecondes (toujours >= 0)