001: /*
002: * @(#)BuddhistCalendar.java 1.10 06/10/10
003: *
004: * Copyright 1990-2006 Sun Microsystems, Inc. All Rights Reserved.
005: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
006: *
007: * This program is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU General Public License version
009: * 2 only, as published by the Free Software Foundation.
010: *
011: * This program is distributed in the hope that it will be useful, but
012: * WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * General Public License version 2 for more details (a copy is
015: * included at /legal/license.txt).
016: *
017: * You should have received a copy of the GNU General Public License
018: * version 2 along with this work; if not, write to the Free Software
019: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA
021: *
022: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
023: * Clara, CA 95054 or visit www.sun.com if you need additional
024: * information or have any questions.
025: */
026:
027: package sun.util;
028:
029: import java.util.GregorianCalendar;
030: import java.util.TimeZone;
031: import java.util.Locale;
032: import java.util.Calendar;
033:
034: public class BuddhistCalendar extends GregorianCalendar {
035:
036: //////////////////
037: // Class Variables
038: //////////////////
039:
040: private static final int buddhistOffset = 543;
041:
042: ///////////////
043: // Constructors
044: ///////////////
045:
046: /**
047: * Constructs a default BuddhistCalendar using the current time
048: * in the default time zone with the default locale.
049: */
050: public BuddhistCalendar() {
051: super ();
052: }
053:
054: /**
055: * Constructs a BuddhistCalendar based on the current time
056: * in the given time zone with the default locale.
057: * @param zone the given time zone.
058: */
059: public BuddhistCalendar(TimeZone zone) {
060: super (zone);
061: }
062:
063: /**
064: * Constructs a BuddhistCalendar based on the current time
065: * in the default time zone with the given locale.
066: * @param aLocale the given locale.
067: */
068: public BuddhistCalendar(Locale aLocale) {
069: super (aLocale);
070: }
071:
072: /**
073: * Constructs a BuddhistCalendar based on the current time
074: * in the given time zone with the given locale.
075: * @param zone the given time zone.
076: * @param aLocale the given locale.
077: */
078: public BuddhistCalendar(TimeZone zone, Locale aLocale) {
079: super (zone, aLocale);
080: }
081:
082: /////////////////
083: // Public methods
084: /////////////////
085:
086: /**
087: * Compares this BuddhistCalendar to an object reference.
088: * @param obj the object reference with which to compare
089: * @return true if this object is equal to <code>obj</code>; false otherwise
090: */
091: public boolean equals(Object obj) {
092: return super .equals(obj) && obj instanceof BuddhistCalendar;
093: }
094:
095: /**
096: * Override hashCode.
097: * Generates the hash code for the BuddhistCalendar object
098: */
099: public int hashCode() {
100: return super .hashCode() ^ buddhistOffset;
101: }
102:
103: /**
104: * Gets the value for a given time field.
105: * @param field the given time field.
106: * @return the value for the given time field.
107: */
108: public int get(int field) {
109: if (field == YEAR) {
110: return super .get(field) + yearOffset;
111: }
112: return super .get(field);
113: }
114:
115: /**
116: * Sets the time field with the given value.
117: * @param field the given time field.
118: * @param value the value to be set for the given time field.
119: */
120: public void set(int field, int value) {
121: if (field == YEAR) {
122: super .set(field, value - yearOffset);
123: } else {
124: super .set(field, value);
125: }
126: }
127:
128: /**
129: * Adds the specified (signed) amount of time to the given time field.
130: * @param field the time field.
131: * @param amount the amount of date or time to be added to the field.
132: */
133: public void add(int field, int amount) {
134: yearOffset = 0;
135: super .add(field, amount);
136: yearOffset = buddhistOffset;
137: }
138:
139: /**
140: * Add to field a signed amount without changing larger fields.
141: * A negative roll amount means to subtract from field without changing
142: * larger fields.
143: * @param field the time field.
144: * @param amount the signed amount to add to <code>field</code>.
145: */
146: public void roll(int field, int amount) {
147: yearOffset = 0;
148: super .roll(field, amount);
149: yearOffset = buddhistOffset;
150: }
151:
152: private transient int yearOffset = buddhistOffset;
153:
154: // Proclaim serialization compatibility with JDK 1.4.0
155: static final long serialVersionUID = -8527488697350388578L;
156: }
|