Internal date utilities. Defines utilities to process dates. See also: COM.INFORMATIMAGO.COMMON-LISP.CESARUM.DATE COM.INFORMATIMAGO.COMMON-LISP.CESARUM.GREGORIAN-CALENDAR COM.INFORMATIMAGO.COMMON-LISP.CESARUM.JULIAN-CALENDAR License: AGPL3 Copyright Pascal J. Bourguignon 2007 - 2012 This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see <http://www.gnu.org/licenses/>

*day* |
variable |

Symbolic duration of one day.

Initial value:1 day

*duration-keywords* |
variable |

A list of keywords allowed in duration expressions, in the order they should be printed.

Initial value:(YEAR MONTH WEEK DAY HOUR MINUTE SECONDE)

*hour* |
variable |

Symbolic duration of one hour.

Initial value:1 hour

*minute* |
variable |

Symbolic duration of one minute.

Initial value:1 minute

*month* |
variable |

Symbolic duration of one month.

Initial value:1 month

*quarter* |
variable |

Symbolic duration of one quarter.

Initial value:3 months

*seconde* |
variable |

Symbolic duration of one second.

Initial value:1 seconde

*week* |
variable |

Symbolic duration of one week.

Initial value:1 week

*year* |
variable |

Symbolic duration of one year.

Initial value:1 year

+april+ |
constant |

The number of the April month in the Gregorial calendar.

Initial value:4

+august+ |
constant |

The number of the August month in the Gregorial calendar.

Initial value:8

+december+ |
constant |

The number of the December month in the Gregorial calendar.

Initial value:12

+february+ |
constant |

The number of the February month in the Gregorial calendar.

Initial value:2

+january+ |
constant |

The number of the January month in the Gregorial calendar.

Initial value:1

+july+ |
constant |

The number of the July month in the Gregorial calendar.

Initial value:7

+june+ |
constant |

The number of the June month in the Gregorial calendar.

Initial value:6

+march+ |
constant |

The number of the Marchmonth in the Gregorial calendar.

Initial value:3

+may+ |
constant |

The number of the May month in the Gregorial calendar.

Initial value:5

+november+ |
constant |

The number of the November month in the Gregorial calendar.

Initial value:11

+october+ |
constant |

The number of the October month in the Gregorial calendar.

Initial value:10

+september+ |
constant |

The number of the September month in the Gregorial calendar.

Initial value:9

( as-list-of-numbers date) |
generic-function |

Return the values of the date from the most significant number to the last. It can be a list of a single number. This is meaningful only in the context of the given date class, and used to compare two dates of the same class.

( collapse-julian-duration duration) |
generic-function |

DO: Collapse weeks as 7 days. RETURN: secondes; minutes; hours; days; months; years NOTE: If you add keywords to *DURATION-KEYWORDS* you may have to override this method.

( compare-lists-of-numbers a b) |
function |

PRE: (and (proper-list-p a) (proper-list-p b) (every (function realp) a) (every (function realp) b)) RETURN: The lexicographical order of the two lists of numbers.

( current-timezone) |
function |

RETURN: The current default timezone, expressed as a number of seconds from Greenwich; East positive. WARNING: COMMON-LISP convention is West positive.

( date-after date duration) |
generic-function |

RETURN: The date DURATION after DATE.

( date-before date duration) |
generic-function |

RETURN: The date DURATION before DATE.

( date/= date1 date2) |
generic-function |

RETURN: Whether DATE1 is different from DATE2.

( date< date1 date2) |
generic-function |

RETURN: Whether DATE1 is before DATE2.

( date<= date1 date2) |
generic-function |

RETURN: Whether DATE1 is before or the same as DATE2.

( date= date1 date2) |
generic-function |

RETURN: Whether DATE1 is the same as DATE2.

( date> date1 date2) |
generic-function |

RETURN: Whether DATE1 is after DATE2.

( date>= date1 date2) |
generic-function |

RETURN: Whether DATE1 is after or the same as DATE2.

( day duration) |
generic-function |

RETURN: The day of the duration. NOTE: This is not the duration expressed in day, just the day component of the duration.

( define-date-compare-methods class) |
macro |

DO: Define date comparison methods.

( dst-in-year year) |
function |

RETURN: A list of (year m d) where DST is shifted in or out in the YEAR/ BUG: This uses the undetermined local timezone, we don't know what country DST is returned...

duration |
class |

We store durations 'symbolically'. The 'units' may be colinear in a given calendar, but we don't collapse them because either they may be not colinear in other calendars, or their ratio may not be always the same (eg. 1 year is 24 months in the Davian calendar vs 12 months in the Gregorian calendar, or 1 month may be 28, 29, 30 or 31 days). There is no order for durations. Moreover, the set of units is not hardwired, the client may add new units to the *DURATION-KEYWORDS* list. Only the units listed in *DURATION-KEYWORDS* are processed by the DURATION arithmetic operators. This allows us to use these DURATION objects with respect to any calendar.

Class precedence list:DURATION STANDARD-OBJECT T

( duration &rest expression &key &allow-other-keys) |
function |

RETURN: A new DURATION instance, initialized with the EXPRESSION. NOTE: Only the keywords listed in *DURATION-KEYWORDS* are really allowed.

( duration* a n) |
generic-function |

RETURN: The product of a duration by a number.

( duration+ a b) |
generic-function |

RETURN: The sum of two durations.

( duration- a b) |
generic-function |

RETURN: The difference of two durations.

( duration-between end start) |
generic-function |

Return the DURATION between END and START. Both END and START dates must be of the same class.

( english-name-of-julian-month month) |
function |

RETURN: A string containing the name in English of the MONTH (Julian, Gregorian, etc, calendars).

( english-name-of-julian-weekday weekday) |
function |

RETURN: A string containing the name in English of the WEEKDAY.

( hms60-from-secondes secondes) |
function |

RETURN: seconde ; minute ; hour POST: (or (not (integerp secondes)) (= secondes (multiple-value-call (function hms-to-secondes) (hms60-from-secondes secondes))))

( hms60-to-secondes seconde minute hour) |
function |

RETURN: The number of seconds corresponding to hour:minute:second in base sixty.

( hour duration) |
generic-function |

RETURN: The hour of the duration. NOTE: This is not the duration expressed in hour, just the hour component of the duration.

( julian-date seconde minute hour julian-day-number) |
function |

RETURN: The Julian Date for the given time and Julian Day Number. URL: <http://en.wikipedia.org/wiki/Julian_day#Calculation>

( julian-day-number/gregorian day month year) |
function |

RETURN: The Julian Day Number for the given Gregorian Date. URL: <http://en.wikipedia.org/wiki/Julian_day#Calculation>

( julian-day-number/julian day month year) |
function |

RETURN: The Julian Day Number for the given Julian Date. URL: <http://en.wikipedia.org/wiki/Julian_day#Calculation>

( minute duration) |
generic-function |

RETURN: The minute of the duration. NOTE: This is not the duration expressed in minute, just the minute component of the duration.

( month duration) |
generic-function |

RETURN: The month of the duration. NOTE: This is not the duration expressed in month, just the month component of the duration.

( seconde duration) |
generic-function |

RETURN: The seconde of the duration. NOTE: This is not the duration expressed in seconde, just the seconde component of the duration.

( week duration) |
generic-function |

RETURN: The week of the duration. NOTE: This is not the duration expressed in week, just the week component of the duration.

( weekday-of-julian-date julian-date) |
function |

RETURN: The Day of the week of the given Julian Day. 0 = Monday, 1 = Tuesday, ..., 6 = Sunday. URL: <http://en.wikipedia.org/wiki/Julian_day#Calculation>

( year duration) |
generic-function |

RETURN: The year of the duration. NOTE: This is not the duration expressed in year, just the year component of the duration.