diff options
Diffstat (limited to 'calendar/base/public/calIDateTime.idl')
-rw-r--r-- | calendar/base/public/calIDateTime.idl | 232 |
1 files changed, 232 insertions, 0 deletions
diff --git a/calendar/base/public/calIDateTime.idl b/calendar/base/public/calIDateTime.idl new file mode 100644 index 000000000..d6c94052b --- /dev/null +++ b/calendar/base/public/calIDateTime.idl @@ -0,0 +1,232 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "nsISupports.idl" + +interface calIDuration; +interface calITimezone; + +[scriptable, uuid(fe3e9a58-2938-4b2c-9085-4989d5f7244f)] +interface calIDateTime : nsISupports +{ + /** + * isMutable is true if this instance is modifiable. + * If isMutable is false, any attempts to modify + * the object will throw NS_ERROR_OBJECT_IS_IMMUTABLE. + */ + readonly attribute boolean isMutable; + + /** + * Make this calIDateTime instance immutable. + */ + void makeImmutable(); + + /** + * Clone this calIDateTime instance into a new + * mutable object. + */ + calIDateTime clone(); + + /** + * valid is true if this object contains a valid + * time/date. + */ + // true if this thing is set/valid + readonly attribute boolean isValid; + + /** + * nativeTime contains this instance's PRTime value relative + * to the UTC epoch, regardless of the timezone that's set + * on this instance. If nativeTime is set, the given UTC PRTime + * value is exploded into year/month/etc, forcing the timezone + * setting to UTC. + * + * @warning: When the timezone is set to 'floating', this will return + * the nativeTime as-if the timezone was UTC. Take this into account + * when comparing values. + * + * @note on objects that are pinned to a timezone and have isDate set, + * nativeTime will be 00:00:00 in the timezone of that date, not 00:00:00 in + * UTC. + */ + attribute PRTime nativeTime; + + /** + * Full 4-digit year value (e.g. "1989", "2004") + */ + attribute short year; + + /** + * Month, 0-11, 0 = January + */ + attribute short month; + + /** + * Day of month, 1-[28,29,30,31] + */ + attribute short day; + + /** + * Hour, 0-23 + */ + attribute short hour; + + /** + * Minute, 0-59 + */ + attribute short minute; + + /** + * Second, 0-59 + */ + attribute short second; + + /** + * Gets or sets the timezone of this calIDateTime instance. + * Setting the timezone does not change the actual date/time components; + * to convert between timezones, use getInTimezone(). + * + * @throws NS_ERROR_INVALID_ARG if null is passed in. + */ + attribute calITimezone timezone; + + /** + * Resets the datetime object. + * + * @param year full 4-digit year value (e.g. "1989", "2004") + * @param month month, 0-11, 0 = January + * @param day day of month, 1-[28,29,31] + * @param hour hour, 0-23 + * @param minute minute, 0-59 + * @param second decond, 0-59 + * @param timezone timezone + * + * The passed datetime will be normalized, e.g. a minute value of 60 will + * increase the hour. + * + * @throws NS_ERROR_INVALID_ARG if no timezone is passed in. + */ + void resetTo(in short year, + in short month, + in short day, + in short hour, + in short minute, + in short second, + in calITimezone timezone); + + /** + * The offset of the timezone this datetime is in, relative to UTC, in + * seconds. A positive number means that the timezone is ahead of UTC. + */ + readonly attribute long timezoneOffset; + + /** + * isDate indicates that this calIDateTime instance represents a date + * (a whole day), and not a specific time on that day. If isDate is set, + * accessing the hour/minute/second fields will return 0, and and setting + * them is an illegal operation. + */ + attribute boolean isDate; + + /* + * computed values + */ + + /** + * Day of the week. 0-6, with Sunday = 0. + */ + readonly attribute short weekday; + + /** + * Day of the year, 1-[365,366]. + */ + readonly attribute short yearday; + + /* + * Methods + */ + + /** + * Resets this instance to Jan 1, 1970 00:00:00 UTC. + */ + void reset(); + + /** + * Return a string representation of this instance. + */ + AUTF8String toString(); + + /** + * Return a new calIDateTime instance that's the result of + * converting this one into the given timezone. Valid values + * for aTimezone are the same as the timezone field. If + * the "floating" timezone is given, then this object + * is just cloned, and the timezone is set to floating. + */ + calIDateTime getInTimezone(in calITimezone aTimezone); + + // add the given calIDateTime, treating it as a duration, to + // this item. + // XXX will change + void addDuration (in calIDuration aDuration); + + // Subtract two dates and return a duration + // returns duration of this - aOtherDate + // if aOtherDate is > this the duration will be negative + calIDuration subtractDate (in calIDateTime aOtherDate); + + /** + * Compare this calIDateTime instance to aOther. Returns -1, 0, 1 to + * indicate if this < aOther, this == aOther, or this > aOther, + * respectively. + * + * This comparison is timezone-aware; the given values are converted + * to a common timezone before comparing. If either this or aOther is + * floating, both objects are treated as floating for the comparison. + * + * If either this or aOther has isDate set, then only the date portion is + * compared. + * + * @exception calIErrors.INVALID_TIMEZONE bad timezone on this object + * (not the argument object) + */ + long compare (in calIDateTime aOther); + + // + // Some helper getters for calculating useful ranges + // + + /** + * Returns SUNDAY of the given datetime object's week. + */ + readonly attribute calIDateTime startOfWeek; + + /** + * Returns SATURDAY of the datetime object's week. + */ + readonly attribute calIDateTime endOfWeek; + + // the start/end of the current object's month + readonly attribute calIDateTime startOfMonth; + readonly attribute calIDateTime endOfMonth; + + // the start/end of the current object's year + readonly attribute calIDateTime startOfYear; + readonly attribute calIDateTime endOfYear; + + /** + * This object as either an iCalendar DATE or DATETIME string, as + * appropriate and sets the timezone to either UTC or floating. + */ + attribute ACString icalString; +}; + +/** Libical specific interfaces */ + +[ptr] native icaltimetypeptr(struct icaltimetype); +[scriptable, uuid(04139dff-a6f0-446d-9aec-2062df887ef2)] +interface calIDateTimeLibical : calIDateTime +{ + [noscript,notxpcom] void toIcalTime(in icaltimetypeptr itt); +}; |