java.util.Calendar Maven / Gradle / Ivy
/**
* This class gets copy-and-pasted between the eu.future.earth.gwt.emul.java.util (used for
* development and testing) and com.google.gwt.emul.java.util packages (used for gwt compilation).
* Change the comments on the package declaration appropriately.
*/
package java.util;
public abstract class Calendar implements Cloneable {
protected Calendar() {
super();
}
/**
* Field number for get
and set
indicating the era, e.g., AD or BC in
* the Julian calendar. This is a calendar-specific value; see subclass documentation.
*
* @see GregorianCalendar#AD
* @see GregorianCalendar#BC
*/
public final static int ERA = 0;
/**
* Field number for get
and set
indicating the year. This is a
* calendar-specific value; see subclass documentation.
*/
public final static int YEAR = 1;
/**
* Field number for get
and set
indicating the month. This is a
* calendar-specific value. The first month of the year in the Gregorian and Julian calendars is
* JANUARY
which is 0; the last depends on the number of months in a year.
*
* @see #JANUARY
* @see #FEBRUARY
* @see #MARCH
* @see #APRIL
* @see #MAY
* @see #JUNE
* @see #JULY
* @see #AUGUST
* @see #SEPTEMBER
* @see #OCTOBER
* @see #NOVEMBER
* @see #DECEMBER
* @see #UNDECIMBER
*/
public final static int MONTH = 2;
/**
* Field number for get
and set
indicating the week number within the
* current year. The first week of the year, as defined by getFirstDayOfWeek()
and
* getMinimalDaysInFirstWeek()
, has value 1. Subclasses define the value of
* WEEK_OF_YEAR
for days before the first week of the year.
*
* @see #getFirstDayOfWeek
* @see #getMinimalDaysInFirstWeek
*/
public final static int WEEK_OF_YEAR = 3;
/**
* Field number for get
and set
indicating the week number within the
* current month. The first week of the month, as defined by getFirstDayOfWeek()
and
* getMinimalDaysInFirstWeek()
, has value 1. Subclasses define the value of
* WEEK_OF_MONTH
for days before the first week of the month.
*
* @see #getFirstDayOfWeek
* @see #getMinimalDaysInFirstWeek
*/
public final static int WEEK_OF_MONTH = 4;
/**
* Field number for get
and set
indicating the day of the month. This is
* a synonym for DAY_OF_MONTH
. The first day of the month has value 1.
*
* @see #DAY_OF_MONTH
*/
public final static int DATE = 5;
/**
* Field number for get
and set
indicating the day of the month. This is
* a synonym for DATE
. The first day of the month has value 1.
*
* @see #DATE
*/
public final static int DAY_OF_MONTH = 5;
/**
* Field number for get
and set
indicating the day number within the
* current year. The first day of the year has value 1.
*/
public final static int DAY_OF_YEAR = 6;
/**
* Field number for get
and set
indicating the day of the week. This
* field takes values SUNDAY
, MONDAY
, TUESDAY
,
* WEDNESDAY
, THURSDAY
, FRIDAY
, and SATURDAY
.
*
* @see #SUNDAY
* @see #MONDAY
* @see #TUESDAY
* @see #WEDNESDAY
* @see #THURSDAY
* @see #FRIDAY
* @see #SATURDAY
*/
public final static int DAY_OF_WEEK = 7;
/**
* Field number for get
and set
indicating the ordinal number of the day
* of the week within the current month. Together with the DAY_OF_WEEK
field, this
* uniquely specifies a day within a month. Unlike WEEK_OF_MONTH
and
* WEEK_OF_YEAR
, this field's value does not depend on
* getFirstDayOfWeek()
or getMinimalDaysInFirstWeek()
.
* DAY_OF_MONTH 1
through 7
always correspond to
* DAY_OF_WEEK_IN_MONTH
* 1
; 8
through 14
correspond to
* DAY_OF_WEEK_IN_MONTH 2
, and so on. DAY_OF_WEEK_IN_MONTH 0
indicates
* the week before DAY_OF_WEEK_IN_MONTH 1
. Negative values count back from the end of
* the month, so the last Sunday of a month is specified as
* DAY_OF_WEEK = SUNDAY, DAY_OF_WEEK_IN_MONTH = -1
. Because negative values count
* backward they will usually be aligned differently within the month than positive values. For
* example, if a month has 31 days, DAY_OF_WEEK_IN_MONTH -1
will overlap
* DAY_OF_WEEK_IN_MONTH 5
and the end of 4
.
*
* @see #DAY_OF_WEEK
* @see #WEEK_OF_MONTH
*/
public final static int DAY_OF_WEEK_IN_MONTH = 8;
/**
* Field number for get
and set
indicating whether the HOUR
* is before or after noon. E.g., at 10:04:15.250 PM the AM_PM
is PM
.
*
* @see #AM
* @see #PM
* @see #HOUR
*/
public final static int AM_PM = 9;
/**
* Field number for get
and set
indicating the hour of the morning or
* afternoon. HOUR
is used for the 12-hour clock (0 - 11). Noon and midnight are
* represented by 0, not by 12. E.g., at 10:04:15.250 PM the HOUR
is 10.
*
* @see #AM_PM
* @see #HOUR_OF_DAY
*/
public final static int HOUR = 10;
/**
* Field number for get
and set
indicating the hour of the day.
* HOUR_OF_DAY
is used for the 24-hour clock. E.g., at 10:04:15.250 PM the
* HOUR_OF_DAY
is 22.
*
* @see #HOUR
*/
public final static int HOUR_OF_DAY = 11;
/**
* Field number for get
and set
indicating the minute within the hour.
* E.g., at 10:04:15.250 PM the MINUTE
is 4.
*/
public final static int MINUTE = 12;
/**
* Field number for get
and set
indicating the second within the minute.
* E.g., at 10:04:15.250 PM the SECOND
is 15.
*/
public final static int SECOND = 13;
/**
* Field number for get
and set
indicating the millisecond within the
* second. E.g., at 10:04:15.250 PM the MILLISECOND
is 250.
*/
public final static int MILLISECOND = 14;
/**
* Value of the {@link #DAY_OF_WEEK} field indicating Sunday.
*/
public final static int SUNDAY = 1;
/**
* Value of the {@link #DAY_OF_WEEK} field indicating Monday.
*/
public final static int MONDAY = 2;
/**
* Value of the {@link #DAY_OF_WEEK} field indicating Tuesday.
*/
public final static int TUESDAY = 3;
/**
* Value of the {@link #DAY_OF_WEEK} field indicating Wednesday.
*/
public final static int WEDNESDAY = 4;
/**
* Value of the {@link #DAY_OF_WEEK} field indicating Thursday.
*/
public final static int THURSDAY = 5;
/**
* Value of the {@link #DAY_OF_WEEK} field indicating Friday.
*/
public final static int FRIDAY = 6;
/**
* Value of the {@link #DAY_OF_WEEK} field indicating Saturday.
*/
public final static int SATURDAY = 7;
/**
* Value of the {@link #MONTH} field indicating the first month of the year in the Gregorian and
* Julian calendars.
*/
public final static int JANUARY = 0;
/**
* Value of the {@link #MONTH} field indicating the second month of the year in the Gregorian and
* Julian calendars.
*/
public final static int FEBRUARY = 1;
/**
* Value of the {@link #MONTH} field indicating the third month of the year in the Gregorian and
* Julian calendars.
*/
public final static int MARCH = 2;
/**
* Value of the {@link #MONTH} field indicating the fourth month of the year in the Gregorian and
* Julian calendars.
*/
public final static int APRIL = 3;
/**
* Value of the {@link #MONTH} field indicating the fifth month of the year in the Gregorian and
* Julian calendars.
*/
public final static int MAY = 4;
/**
* Value of the {@link #MONTH} field indicating the sixth month of the year in the Gregorian and
* Julian calendars.
*/
public final static int JUNE = 5;
/**
* Value of the {@link #MONTH} field indicating the seventh month of the year in the Gregorian and
* Julian calendars.
*/
public final static int JULY = 6;
/**
* Value of the {@link #MONTH} field indicating the eighth month of the year in the Gregorian and
* Julian calendars.
*/
public final static int AUGUST = 7;
/**
* Value of the {@link #MONTH} field indicating the ninth month of the year in the Gregorian and
* Julian calendars.
*/
public final static int SEPTEMBER = 8;
/**
* Value of the {@link #MONTH} field indicating the tenth month of the year in the Gregorian and
* Julian calendars.
*/
public final static int OCTOBER = 9;
/**
* Value of the {@link #MONTH} field indicating the eleventh month of the year in the Gregorian
* and Julian calendars.
*/
public final static int NOVEMBER = 10;
/**
* Value of the {@link #MONTH} field indicating the twelfth month of the year in the Gregorian and
* Julian calendars.
*/
public final static int DECEMBER = 11;
/**
* Value of the {@link #MONTH} field indicating the thirteenth month of the year. Although
* GregorianCalendar
does not use this value, lunar calendars do.
*/
public final static int UNDECIMBER = 12;
/**
* Value of the {@link #AM_PM} field indicating the period of the day from midnight to just before
* noon.
*/
public final static int AM = 0;
/**
* Value of the {@link #AM_PM} field indicating the period of the day from noon to just before
* midnight.
*/
public final static int PM = 1;
/**
* True
if this calendar allows out-of-range field values during computation of
* time
from fields[]
.
*
* @see #setLenient
* @see #isLenient
* @serial
*/
private boolean lenient = true;
/**
* Returns a Date
object representing this Calendar
's time value
* (millisecond offset from the Epoch").
*
* @return a Date
representing the time value.
* @see #setTime(Date)
* @see #getTimeInMillis()
*/
public abstract Date getTime();
/**
* Sets this Calendar's time with the given Date
.
*
* Note: Calling setTime()
with Date(Long.MAX_VALUE)
or
* Date(Long.MIN_VALUE)
may yield incorrect field values from get()
.
*
* @param date the given Date.
* @see #getTime()
* @see #setTimeInMillis(long)
*/
public abstract void setTime(Date date);
/**
* Returns this Calendar's time value in milliseconds.
*
* @return the current time as UTC milliseconds from the epoch.
* @see #getTime()
* @see #setTimeInMillis(long)
*/
public abstract long getTimeInMillis();
/**
* Sets this Calendar's current time from the given long value.
*
* @param millis the new time in UTC milliseconds from the epoch.
* @see #setTime(Date)
* @see #getTimeInMillis()
*/
public abstract void setTimeInMillis(long millis);
public abstract int get(int field);
/**
* Sets the given calendar field to the given value. The value is not interpreted by this method
* regardless of the leniency mode.
*
* @param field the given calendar field.
* @param value the value to be set for the given calendar field.
* @throws ArrayIndexOutOfBoundsException if the specified field is out of range
* (field < 0 || field >= FIELD_COUNT
). in non-lenient mode.
* @see #set(int,int,int)
* @see #set(int,int,int,int,int)
* @see #set(int,int,int,int,int,int)
* @see #get(int)
*/
public abstract void set(int field, int value);
public abstract void add(int field, int value);
public abstract void clear();
public int getFirstDayOfWeek() {
return firstDayOfWeek;
}
public void setFirstDayOfWeek(final int newFirstDayOfWeek) {
firstDayOfWeek = newFirstDayOfWeek;
}
public int getMinimalDaysInFirstWeek() {
return minimalDaysInFirstWeek;
}
public void setMinimalDaysInFirstWeek(final int newMinimalDaysInFirstWeek) {
minimalDaysInFirstWeek = newMinimalDaysInFirstWeek;
}
/**
* The first day of the week, with possible values SUNDAY
, MONDAY
, etc.
* This is a locale-dependent value.
*
* @serial
*/
private int firstDayOfWeek = SUNDAY;
/**
* The number of days required for the first week in a month or year, with possible values from 1
* to 7. This is a locale-dependent value.
*
* @serial
*/
private int minimalDaysInFirstWeek = 1;
public abstract Object clone();
public static Calendar getInstance() {
return new GregorianCalendar();
}
/**
* Returns whether this Calendar
represents a time before the time represented by the
* specified Object
. This method is equivalent to:
*
*
*
* compareTo(when) < 0
*
*
*
* if and only if when
is a Calendar
instance. Otherwise, the method
* returns false
.
*
* @param when the Object
to be compared
* @return true
if the time of this Calendar
is before the time
* represented by when
; false
otherwise.
* @see #compareTo(Calendar)
*/
public boolean before(final Object when) {
return when instanceof Calendar && compareTo((Calendar) when) < 0;
}
/**
* Returns whether this Calendar
represents a time after the time represented by the
* specified Object
. This method is equivalent to:
*
*
*
* compareTo(when) > 0
*
*
*
* if and only if when
is a Calendar
instance. Otherwise, the method
* returns false
.
*
* @param when the Object
to be compared
* @return true
if the time of this Calendar
is after the time
* represented by when
; false
otherwise.
* @see #compareTo(Calendar)
*/
public boolean after(final Object when) {
return when instanceof Calendar && compareTo((Calendar) when) > 0;
}
/**
* Compares this Calendar
to the specified Object
. The result is
* true
if and only if the argument is a Calendar
object of the same
* calendar system that represents the same time value (millisecond offset from the
* Epoch) under the same Calendar
parameters as this object.
*
*
* The Calendar
parameters are the values represented by the isLenient
,
* getFirstDayOfWeek
, getMinimalDaysInFirstWeek
and
* getTimeZone
methods. If there is any difference in those parameters between the
* two Calendar
s, this method returns false
.
*
*
* Use the {@link #compareTo(Calendar) compareTo} method to compare only the time values.
*
* @param obj the object to compare with.
* @return true
if this object is equal to obj
; false
* otherwise.
*/
@Override
public boolean equals(final Object obj) {
if (this == obj) {
return true;
}
try {
final Calendar that = (Calendar) obj;
return getMillisOf(that) == getMillisOf(this);
} catch (final Exception e) {
// Note: GregorianCalendar.computeTime throws
// IllegalArgumentException if the ERA value is invalid
// even it's in lenient mode.
}
return false;
}
/**
* Compares the time values (millisecond offsets from the Epoch) represented
* by two Calendar
objects.
*
* @param anotherCalendar the Calendar
to be compared.
* @return the value 0
if the time represented by the argument is equal to the time
* represented by this Calendar
; a value less than 0
if the time
* of this Calendar
is before the time represented by the argument; and a
* value greater than 0
if the time of this Calendar
is after
* the time represented by the argument.
* @exception NullPointerException if the specified Calendar
is null
.
* @exception IllegalArgumentException if the time value of the specified Calendar
* object can't be obtained due to any invalid calendar values.
* @since 1.5
*/
public int compareTo(final Calendar anotherCalendar) {
return compareTo(getMillisOf(anotherCalendar));
}
/**
* Specifies whether or not date/time interpretation is to be lenient. With lenient
* interpretation, a date such as "February 942, 1996" will be treated as being equivalent to the
* 941st day after February 1, 1996. With strict (non-lenient) interpretation, such dates will
* cause an exception to be thrown. The default is lenient.
*
* @param lenient true
if the lenient mode is to be turned on; false
if
* it is to be turned off.
* @see #isLenient()
* @see java.text.DateFormat#setLenient
*/
public void setLenient(final boolean lenient) {
this.lenient = lenient;
}
/**
* Tells whether date/time interpretation is to be lenient.
*
* @return true
if the interpretation mode of this calendar is lenient;
* false
otherwise.
* @see #setLenient(boolean)
*/
public boolean isLenient() {
return lenient;
}
private int compareTo(final long t) {
final long thisTime = getMillisOf(this);
return thisTime > t ? 1 : thisTime == t ? 0 : -1;
}
private static final long getMillisOf(final Calendar calendar) {
if (calendar == null) {
return 0L;
} else {
return calendar.getTimeInMillis();
}
}
public int getActualMaximum(final int field) {
// dummy
return 0;
}
public int getActualMinimum(final int field) {
// dummy
return 0;
}
}