time-hourglass
A simple and efficient time library
https://github.com/mpilgrem/time-hourglass
| Stackage Nightly 2025-11-04: | 0.3.0 | 
| Latest on Hackage: | 0.3.0 | 
time-hourglass-0.3.0@sha256:ee02356fe24919ec43ae17fc0007398c2fd0bbe822833b2d7a9c849537b90580,3114Module documentation for 0.3.0
time-hourglass
Originally forked from
hourglass-0.2.12.
time-hourglass (originally hourglass) is a simple and efficient time
library.
Documentation
See the Haddock documentation on Hackage.
Design
A key part of the design is the Timeable and Time type classes. Types
representing time values that are instances of these classes allow easy
conversion between values of one time type and another.
For example:
let dateTime0 =
      DateTime
        { dtDate = Date
            { dateYear = 1970
            , dateMonth = January
            , dateDay = 1
            }
        , dtTime = TimeOfDay
            { todHour = 0
            , todMin = 0
            , todSec = 0
            , todNSec = 0
            }
        }
    elapsed0 = Elasped 0
> timeGetElapsed elapsed0 == timeGetElapsed dateTime0
True
> timeGetDate elapsed0 == timeGetDate dateTime0
True
> timePrint "YYYY-MM" elapsed0
"1970-01"
> timePrint "YYYY-MM" dateTime0
"1970-01"
The library has the same limitations as your operating system, namely:
- on 32-bit Linux, you can’t get a date after the year 2038; and
 - on Windows, you can’t get a date before the year 1601.
 
Comparaison with the time package
- 
Getting the elapsed time since 1970-01-01 00:00:00 UTC (POSIX time) from the system clock:
-- With time: import Data.Time.Clock.POSIX ( getPOSIXTime ) ptime <- getPOSIXTime -- With time-hourglass: import System.Hourglass ( timeCurrent ) ptime <- timeCurrent - 
Getting the current year:
-- With time: import Data.Time.Clock ( UTCTime (..) ) import Data.Time.Clock.POSIX ( getCurrentTime ) import Data.Time.Calendar ( toGregorian ) currentYear <- (\(y, _, _) -> y) . toGregorian . utcDay <$> getCurrentTime -- With time-hourglass: import System.Hourglass ( timeCurrent ) import Data.Hourglass ( Date (..), timeGetDate ) currentYear <- dateYear . timeGetDate <$> timeCurrent - 
Representating “4th May 1970 15:12:24”
-- With time: import Data.Time.Clock ( UTCTime (..), secondsToDiffTime ) import Date.Time.Calendar ( fromGregorian ) let day = fromGregorian 1970 5 4 diffTime = secondsToDiffTime (15 * 3600 + 12 * 60 + 24) in UTCTime day diffTime -- With time-hourglass: import Date.Time ( Date (..), DateTime (..), TimeOfDay (..) ) DateTime (Date 1970 May 4) (TimeOfDay 15 12 24 0) 
History
The hourglass package was
originated and then maintained by Vincent Hanquez. For published reasons, he
does not intend to develop the package further after version 0.2.12 but he also
does not want to introduce other maintainers.
Changes
Change log for time-hourglass
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to the Haskell Package Versioning Policy.
0.3.0 - 2025-08-01
- Drop support for GHC < 8.6.
 - Add 
Realinstance forElapsedSinceP. - Add 
Readinstances forTimezoneOffsetandRead t => LocalTime t. - Export 
fromRationalSecondsP,mkElapsedP, andfromRationalElapsedP, to facilitate creation ofElapsedPvalues from precise amounts of seconds or numbers of seconds and nanoseconds. - Test added to test suite for 
toRational :: ElapsedSinceP -> RationalandfromRationalElapsedP. - Add 
Format_DayYear3for a day of the year padded to 3 characters, represented by @“JJJ”@. - Change the types of fields of 
TimeFormatFct: the parser and printer are in terms ofDateTimeandTimezoneOffset(rather than justDateTime). - In 
localTimePrintetc, implementFormat_TimezoneNameandFormat_Fct. - In 
localTimeParseEetc, implementFormat_Month,Format_DayYear,Format_Day,Format_TimezoneName,Format_Tz_OffsetandFormat_Fct. - Test added to test suite for 
Format_Fctparsing and printing. - In 
localTimeParseEetc,Format_Spacesnow parses one or more space-like characters (as previously documented), rather than one space character (as previously implemented). - Export 
MJDEpoch, representing the Modified Julian Date (MJD) epoch. - Drop deprecated modules 
Data.Hourglass.Compat,Data.Hourglass.Epoch,Data.Hourglass.TypesandSystem.Hourglass. Use modulesTime.Compat,Time.EpochandTime.Types. - Drop deprecated function 
dateFromPOSIXEpoch. UsedataFromUnixEpoch. - Drop deprecated function 
dateFromTAIEpoch. UsedateFromMJDEpoch. - Fix Haddock documentaton for 
Format_Hours,Format_MinutesandFormat_Seconds; they all pad to 2 characters. - Fix Haddock documentaton for 
Format_Millisecond,Format_MicroSecondandFormat_NanoSecond; they parse and print components only, and all pad to 3 characters. - Fix error message if a 
Format_Textparse fails. - Add Haddock documentation for the 
Stringinstance ofTimeFormat. 
0.2.14 - 2025-07-24
- In test-suite and benchmark, depend on main library, drop dependency on
package 
hourglass. 
0.2.13 - 2025-07-23
- Drop support for GHC < 8.4.
 - Move library modules to directory 
srcand benchmark module to directorybenchmarks. - Move module 
Example.Time.Compatto directoryexamples. - Expose module 
Time.Epochand deprecate equivalent moduleData.Hourglass.Epoch. - Renamed non-exposed library modules under the 
Time.*hierarchy. - Use 
LANGUAGE PackageImportsin moduleExample.Time.Compat, allowingstack ghci examples/Example/Time/Compat.hs. - Eliminate the use of CPP to vary source code for different operating systems.
 - Fix 
other-modulesofbench-hourglassbenchmark. bench-hourglassbenchmark depends ontasty-bench, drop dependency ongauge.- Improve Haddock and other documentation.
 - Export new 
dateFromUnixEpochand deprecate identicaldateFromPOSIXEpochto name epoch consistently. - Export new 
dateFromMJDEpochand deprecate identicaldateFromTAIEpochto fix the latter being a misnomer. 
0.2.12 - 2025-07-21
- Rename 
hourglass-0.2.12package astime-hourglass-0.2.12. - Cabal file specifies 
cabal-version: 1.12(not>= 1.10). - Change maintainer field to 
Mike Pilgrem <[email protected]>. - Add 
bug-reportsfield to Cabal file. - Reset 
CHANGELOG.md. - Update 
README.mdbadges. - In test-suite 
test-hourglassreplace use ofparseTime(removed from packagetime-1.10) withparseTimeM True.