Common Lisp Package: COM.INFORMATIMAGO.COMMON-LISP.CESARUM.DATE

Calendars, dates and times. See also: COM.INFORMATIMAGO.COMMON-LISP.CESARUM.DATE COM.INFORMATIMAGO.COMMON-LISP.CESARUM.DATE.UTILITY COM.INFORMATIMAGO.COMMON-LISP.GREGORIAN-CALENDAR COM.INFORMATIMAGO.COMMON-LISP.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/>

README:

FUNCTION

Public

DURATION (&REST EXPRESSION &KEY &ALLOW-OTHER-KEYS)

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

GREGORIAN (&KEY (YEAR 1582 YEARP) (MONTH +OCTOBER+ MONTHP) (DAY 15 DAYP) (HOUR 0 HOURP) (MINUTE 0 MINUTEP) (SECONDE 0 SECONDEP) (TIMEZONE NIL) (UNIVERSAL-TIME NIL))

RETURN: A new Gregorian date. YEAR: The year (historically, should be greater or equal to 1582). MONTH: The month. DAY: The day. HOUR: The hour. MINUTE: The minute. SECONDE: The second. TIMEZONE: The timezone. UNIVERSAL-TIME: The date expressed in universal-time. NOTE: UNIVERSAL-TIME when present gives a base date with default values for the other fields.

Private

LEAP-YEAR-P (YEAR)

RETURN: Whether YEAR is a gregorian leap year.

GENERIC-FUNCTION

Public

AS-JULIAN-DATE (DATE)

RETURN: The date converted to the Julian calendar.

AS-UNIVERSAL-TIME (DATE)

RETURN: The date converted to universal-time.

DATE-AFTER (DATE DURATION)

RETURN: The date DURATION after DATE.

DATE-BEFORE (DATE DURATION)

RETURN: The date DURATION before DATE.

DATE/= (DATE1 DATE2)

RETURN: Whether DATE1 is different from DATE2.

DATE< (DATE1 DATE2)

RETURN: Whether DATE1 is before DATE2.

DATE<= (DATE1 DATE2)

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

DATE= (DATE1 DATE2)

RETURN: Whether DATE1 is the same as DATE2.

DATE> (DATE1 DATE2)

RETURN: Whether DATE1 is after DATE2.

DATE>= (DATE1 DATE2)

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

DECREMENT-DAY (DATE &OPTIONAL INCREMENT)

DO: Changes the DATE to INCREMENT days before DATE.

DURATION* (A N)

RETURN: The product of a duration by a number.

DURATION+ (A B)

RETURN: The sum of two durations.

DURATION- (A B)

RETURN: The difference of two durations.

DURATION-BETWEEN (END START)

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

INCREMENT-DAY (DATE &OPTIONAL INCREMENT)

DO: Changes the DATE to INCREMENT days after DATE.

NEXT-DAY (DATE &OPTIONAL INCREMENT)

RETURN: A new date that is INCREMENT days after DATE.

PREVIOUS-DAY (DATE &OPTIONAL INCREMENT)

RETURN: A new date that is INCREMENT days before DATE.

TO-TIMEZONE (DATE TIMEZONE)

RETURN: A new date equal to the DATE, but in the given TIMEZONE.

WEEK (DURATION)

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

WEEKDAY (DATE)

RETURN: The weekday of a date.

Undocumented

SETFWEEK (VALUE SELF)

SLOT-ACCESSOR

Public

DAY (DURATION)

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

SETFDAY (VALUE SELF)

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

HOUR (DURATION)

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

SETFHOUR (VALUE SELF)

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

MINUTE (DURATION)

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

SETFMINUTE (VALUE SELF)

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

MONTH (DURATION)

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

SETFMONTH (VALUE SELF)

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

SECONDE (DURATION)

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

SETFSECONDE (VALUE SELF)

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

TIMEZONE (DATE)

The RETURN: The timezone of a date = number of seconds from Greenwich; East positive.

SETFTIMEZONE (NEW-VALUE OBJECT)

Set the RETURN: The timezone of a date = number of seconds from Greenwich; East positive.

YEAR (DURATION)

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

SETFYEAR (VALUE SELF)

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

VARIABLE

Public

*DAY*

Symbolic duration of one day.

*DURATION-KEYWORDS*

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

*HOUR*

Symbolic duration of one hour.

*MINUTE*

Symbolic duration of one minute.

*MONTH*

Symbolic duration of one month.

*QUARTER*

Symbolic duration of one quarter.

*SECONDE*

Symbolic duration of one second.

*WEEK*

Symbolic duration of one week.

*YEAR*

Symbolic duration of one year.

CLASS

Public

DURATION (&REST EXPRESSION &KEY &ALLOW-OTHER-KEYS)

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.

GREGORIAN-CALENDAR-DATE

A date in the Gregorian calendar.

CONSTANT

Public

+APRIL+

The number of the April month in the Gregorial calendar.

+AUGUST+

The number of the August month in the Gregorial calendar.

+DECEMBER+

The number of the December month in the Gregorial calendar.

+FEBRUARY+

The number of the February month in the Gregorial calendar.

+JANUARY+

The number of the January month in the Gregorial calendar.

+JULY+

The number of the July month in the Gregorial calendar.

+JUNE+

The number of the June month in the Gregorial calendar.

+MARCH+

The number of the Marchmonth in the Gregorial calendar.

+MAY+

The number of the May month in the Gregorial calendar.

+NOVEMBER+

The number of the November month in the Gregorial calendar.

+OCTOBER+

The number of the October month in the Gregorial calendar.

+SEPTEMBER+

The number of the September month in the Gregorial calendar.