hourglass-0.2.8: simple performant time related library

License | BSD-style
Maintainer | Vincent Hanquez <vincent@snarc.org>
Safe Haskell | None
Language | Haskell2010

Data.Hourglass.Types

Contents

- Time units
- Time enumeration
- Timezone
- Computer friendly format
  - Unix elapsed
- Human friendly format
  - Calendar time

Description

Basic times units and types.

While pratically some units could hold infinite values, for practical and efficient purpose they are limited to int64 types for seconds and int types for years.

Most units use the unix epoch referential, but by no means reduce portability. the unix referential works under the Windows platform or any other platforms.

Synopsis

- newtype NanoSeconds = NanoSeconds Int64
- newtype Seconds = Seconds Int64
- newtype Minutes = Minutes Int64
- newtype Hours = Hours Int64
- class TimeInterval i where
  - toSeconds :: i -> Seconds
  - fromSeconds :: Seconds -> (i, Seconds)
- data Month
  - = January
  - | February
  - | March
  - | April
  - | May
  - | June
  - | July
  - | August
  - | September
  - | October
  - | November
  - | December
- data WeekDay
  - = Sunday
  - | Monday
  - | Tuesday
  - | Wednesday
  - | Thursday
  - | Friday
  - | Saturday
- newtype TimezoneOffset = TimezoneOffset {
  - timezoneOffsetToMinutes :: Int
  }
- timezoneOffsetToSeconds :: TimezoneOffset -> Seconds
- timezone_UTC :: TimezoneOffset
- newtype Elapsed = Elapsed Seconds
- data ElapsedP = ElapsedP !Elapsed !NanoSeconds
- data Date = Date {
  - dateYear :: !Int
  - dateMonth :: !Month
  - dateDay :: !Int
  }
- data TimeOfDay = TimeOfDay {
  - todHour :: !Hours
  - todMin :: !Minutes
  - todSec :: !Seconds
  - todNSec :: !NanoSeconds
  }
- data DateTime = DateTime {
  - dtDate :: Date
  - dtTime :: TimeOfDay
  }

# Time units

newtype NanoSeconds

Nanoseconds

Constructors

NanoSeconds Int64 |

Instances

Eq NanoSeconds |
Data NanoSeconds |
Num NanoSeconds |
Ord NanoSeconds |
Read NanoSeconds |
Show NanoSeconds |
NFData NanoSeconds |
TimeInterval NanoSeconds |
Typeable * NanoSeconds |

newtype Seconds

Number of seconds without a referential.

Can hold a number between [-2^63,2^63-1], which should be good for some billions of years.

However, because of limitation in the calendar conversion currently used, seconds should be in the range [-2^55,2^55-1], which is good for only 1 billion of year.

Constructors

Seconds Int64 |

Instances

Enum Seconds |
Eq Seconds |
Integral Seconds |
Data Seconds |
Num Seconds |
Ord Seconds |
Read Seconds |
Real Seconds |
Show Seconds |
NFData Seconds |
TimeInterval Seconds |
Typeable * Seconds |

newtype Minutes

Number of minutes without a referential.

Constructors

Minutes Int64 |

Instances

Enum Minutes |
Eq Minutes |
Integral Minutes |
Data Minutes |
Num Minutes |
Ord Minutes |
Read Minutes |
Real Minutes |
Show Minutes |
NFData Minutes |
TimeInterval Minutes |
Typeable * Minutes |

newtype Hours

Number of hours without a referential.

Constructors

Hours Int64 |

Instances

Enum Hours |
Eq Hours |
Integral Hours |
Data Hours |
Num Hours |
Ord Hours |
Read Hours |
Real Hours |
Show Hours |
NFData Hours |
TimeInterval Hours |
Typeable * Hours |

class TimeInterval i where

Represent any time interval that has an equivalent value to a number of seconds.

Methods

toSeconds :: i -> Seconds

fromSeconds :: Seconds -> (i, Seconds)

Instances

TimeInterval Hours |
TimeInterval Minutes |
TimeInterval Seconds |
TimeInterval NanoSeconds |
TimeInterval Duration |

# Time enumeration

data Month

Month of the year

Constructors

January |
February |
March |
April |
May |
June |
July |
August |
September |
October |
November |
December |

Instances

Enum Month |
Eq Month |
Data Month |
Ord Month |
Show Month |
Typeable * Month |

data WeekDay

Day of the week

the enumeration starts on Sunday.

Constructors

Sunday |
Monday |
Tuesday |
Wednesday |
Thursday |
Friday |
Saturday |

Instances

Enum WeekDay |
Eq WeekDay |
Data WeekDay |
Ord WeekDay |
Read WeekDay |
Show WeekDay |
Typeable * WeekDay |

# Timezone

newtype TimezoneOffset

Offset against UTC in minutes

- a positive number represent a location East of UTC.
- a negative number represent a location West of UTC.

LocalTime t (-300) = t represent a time at UTC-5 LocalTime t (+480) = t represent a time at UTC+8

should be between -11H and +14H

Constructors

TimezoneOffset |
Fields timezoneOffsetToMinutes :: Int return the number of minutes

Instances

Eq TimezoneOffset |
Data TimezoneOffset |
Ord TimezoneOffset |
Show TimezoneOffset |
NFData TimezoneOffset |
Typeable * TimezoneOffset |

timezoneOffsetToSeconds :: TimezoneOffset -> Seconds

Return the number of seconds associated with a timezone

timezone_UTC :: TimezoneOffset

The UTC timezone. offset of 0

# Computer friendly format

## Unix elapsed

newtype Elapsed

A number of seconds elapsed since the unix epoch.

Constructors

Elapsed Seconds |

Instances

Eq Elapsed |
Data Elapsed |
Num Elapsed |
Ord Elapsed |
Read Elapsed |
Show Elapsed |
NFData Elapsed |
Time Elapsed |
Timeable Elapsed |
Typeable * Elapsed |

data ElapsedP

A number of seconds and nanoseconds elapsed since the unix epoch.

Constructors

ElapsedP !Elapsed !NanoSeconds |

Instances

Eq ElapsedP |
Data ElapsedP |
Num ElapsedP |
Ord ElapsedP |
Read ElapsedP |
Real ElapsedP |
Show ElapsedP |
NFData ElapsedP |
Time ElapsedP |
Timeable ElapsedP |
Typeable * ElapsedP |

# Human friendly format

## Calendar time

data Date

human date representation using common calendar

Constructors

Date |
Fields dateYear :: !Int year (Common Era) dateMonth :: !Month month of the year dateDay :: !Int day of the month, between 1 to 31

Instances

Eq Date |
Data Date |
Ord Date |
Show Date |
NFData Date |
Time Date |
Timeable Date |
Typeable * Date |

data TimeOfDay

human time representation of hour, minutes, seconds in a day.

Constructors

TimeOfDay |
Fields todHour :: !Hours hours, between 0 and 23 todMin :: !Minutes minutes, between 0 and 59 todSec :: !Seconds seconds, between 0 and 59. 60 when having leap second */ todNSec :: !NanoSeconds nanoseconds, between 0 and 999999999 */

Instances

Eq TimeOfDay |
Data TimeOfDay |
Ord TimeOfDay |
Show TimeOfDay |
NFData TimeOfDay |
Typeable * TimeOfDay |

data DateTime

Date and Time

Constructors

DateTime |
Fields dtDate :: Date dtTime :: TimeOfDay

Instances

Eq DateTime |
Data DateTime |
Ord DateTime |
Show DateTime |
NFData DateTime |
Time DateTime |
Timeable DateTime |
Typeable * DateTime |