# Design Goals

Category | Description
--- | ---
Functions
Interfaces | Provide concrete classes for manipulation of dates and times

- date, time, date_duration, time_duration, date_period, time_period, etc
- support for infinity - positive infinity, negative infinity
- iterators over time and date ranges
- allow date and time implementations to be separate as much as possible

Calculation | Provide a basis for performing efficient time calculations

- days between dates
- durations of times
- durations of dates and times together

Representation Flexibility | Provide the maximum possible reusability and flexibility

- traits based customization of internal representations for size versus resolution control
- Allowing the use of different epochs and resolution (eg: seconds versus microseconds, dates starting at the year 2000 versus dates starting in 1700)
- Options for configuring unique calendar representations (Gregorian + others)
- the use of Julian Day number and the conversion between this and the Gregorian/Julian calendar date
- Allow for flexible adjustments including leap seconds

Date Calculations | Provide tools for date calculations

- provide basis for calculation of complex event specs like holidays
- calendar to calendar conversions
- provide for ability to extend to new calendar systems

Time Calculations | Provide concrete classes for manipulation of time

- provide the ability to handle cross time-zone issues
- provide adjustments for daylight savings time (summer time)

Clock Interfaces | Provide classes for retrieving time current time

- access to a network / high resolution time sources
- retrieving the current date time information to populate classes

I/O Interfaces | Provide input and output for time including

- multi-lingual support
- provide ISO8601 compliant time facet
- use I/O facets for different local behavior