EN
importPour l'utiliser : import Data.Time

Data.Time — temps machine & civil

Synopsis
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).

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)