Initial revision
From-SVN: r26263
This commit is contained in:
parent
140fa895c6
commit
ee9dd3721b
370 changed files with 173494 additions and 0 deletions
182
libjava/java/util/SimpleTimeZone.java
Normal file
182
libjava/java/util/SimpleTimeZone.java
Normal file
|
@ -0,0 +1,182 @@
|
|||
/* Copyright (C) 1998, 1999 Cygnus Solutions
|
||||
|
||||
This file is part of libgcj.
|
||||
|
||||
This software is copyrighted work licensed under the terms of the
|
||||
Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
|
||||
details. */
|
||||
|
||||
package java.util;
|
||||
|
||||
/**
|
||||
* @author Per Bothner <bothner@cygnus.com>
|
||||
* @date October 24, 1998.
|
||||
*/
|
||||
|
||||
/* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3.
|
||||
* Status: Does not know how to figure out if daylight savings time
|
||||
* is in effect; hence only correct for zones without DST.
|
||||
* No known spec for hashCode.
|
||||
*/
|
||||
|
||||
public class SimpleTimeZone extends TimeZone
|
||||
{
|
||||
// The fields are as specified in Sun's "Serialized Form"
|
||||
// in the JDK 1.2 beta 4 API specification.
|
||||
|
||||
int dstSavings = 60 * 60 * 1000;
|
||||
|
||||
int rawOffset;
|
||||
|
||||
// int serialVersionOnStream;
|
||||
|
||||
int startDay;
|
||||
int startDayOfWeek;
|
||||
int startMode; /// Seems to be JDK 1.2 only.
|
||||
|
||||
int startMonth;
|
||||
|
||||
int startTime;
|
||||
|
||||
int startYear;
|
||||
|
||||
int endDay;
|
||||
|
||||
int endDayOfWeek;
|
||||
|
||||
int endMode; // Seems to be JDK 1.2 only.
|
||||
|
||||
int endMonth;
|
||||
|
||||
int endTime;
|
||||
|
||||
// byte[] monthLength;
|
||||
|
||||
boolean useDaylight;
|
||||
|
||||
public SimpleTimeZone (int rawOffset, String ID)
|
||||
{
|
||||
setID(ID);
|
||||
this.rawOffset = rawOffset;
|
||||
}
|
||||
|
||||
public SimpleTimeZone (int rawOffset, String ID,
|
||||
int startMonth, int startDay,
|
||||
int startDayOfWeek, int startTime,
|
||||
int endMonth, int endDay,
|
||||
int endDayOfWeek, int endTime)
|
||||
{
|
||||
this(rawOffset, ID);
|
||||
setStartRule (startMonth, startDay, startDayOfWeek, startTime);
|
||||
setEndRule (endMonth, endDay, endDayOfWeek, endTime);
|
||||
}
|
||||
|
||||
public int getRawOffset() { return rawOffset; }
|
||||
public void setRawOffset (int offsetMillis) { rawOffset = offsetMillis; }
|
||||
|
||||
public int getOffset (int era, int year, int month, int day,
|
||||
int dayOfWeek, int millis)
|
||||
{
|
||||
int offset = getRawOffset();
|
||||
if (useDaylight)
|
||||
{
|
||||
if (startYear != 0
|
||||
&& (year < startYear || era == GregorianCalendar.BC))
|
||||
return offset;
|
||||
boolean midYearSummer = startMonth < endMonth;
|
||||
if (midYearSummer ? (month < startMonth || month > endMonth)
|
||||
: (month < startMonth && month > endMonth))
|
||||
return offset; // Definitely not DST.
|
||||
if (midYearSummer ? (month > startMonth && month < endMonth)
|
||||
: (month > startMonth || month < endMonth))
|
||||
return offset + dstSavings; // Definitely DST.
|
||||
// Now it gets more complicated. Bail for now.
|
||||
throw new Error("not implemented - SimpleTimeZone.getOffset");
|
||||
}
|
||||
return offset;
|
||||
}
|
||||
|
||||
public boolean useDaylightTime() { return useDaylight; }
|
||||
|
||||
public boolean inDaylightTime(Date date)
|
||||
{
|
||||
if (! useDaylight)
|
||||
return false;
|
||||
throw new Error("not implemented - SimpleTimeZone.inDaylightTime");
|
||||
}
|
||||
|
||||
public int getDSTSavings () { return dstSavings; }
|
||||
|
||||
public void setDSTSavings (int millisSavedDuringDST)
|
||||
{ dstSavings = millisSavedDuringDST; }
|
||||
|
||||
public void setStartRule (int month, int dayOfWeekInMonth,
|
||||
int dayOfWeek, int time)
|
||||
{
|
||||
this.startMonth = month;
|
||||
this.startDay = dayOfWeekInMonth;
|
||||
this.startDayOfWeek = dayOfWeek;
|
||||
this.startTime = time;
|
||||
this.useDaylight = true;
|
||||
}
|
||||
|
||||
public void setEndRule (int month, int dayOfWeekInMonth,
|
||||
int dayOfWeek, int time)
|
||||
{
|
||||
this.endMonth = month;
|
||||
this.endDay = dayOfWeekInMonth;
|
||||
this.endDayOfWeek = dayOfWeek;
|
||||
this.endTime = time;
|
||||
this.useDaylight = true;
|
||||
}
|
||||
|
||||
public void setStartYear (int year)
|
||||
{
|
||||
this.startYear = startYear;
|
||||
}
|
||||
|
||||
public boolean hasSameRules (TimeZone other)
|
||||
{
|
||||
if (this == other)
|
||||
return true;
|
||||
if (! (other instanceof SimpleTimeZone))
|
||||
return false;
|
||||
SimpleTimeZone o = (SimpleTimeZone) other;
|
||||
if (rawOffset != o.rawOffset)
|
||||
return false;
|
||||
if (useDaylight != o.useDaylight)
|
||||
return false;
|
||||
if (! useDaylight)
|
||||
return true;
|
||||
return startDay == o.startDay
|
||||
&& startDayOfWeek == o.startDayOfWeek
|
||||
&& startMonth == o.startMonth
|
||||
&& startTime == o.startTime
|
||||
&& endDay == o.endDay
|
||||
&& endDayOfWeek == o.endDayOfWeek
|
||||
&& endMonth == o.endMonth
|
||||
&& endTime == o.endTime
|
||||
&& startYear == o.startYear
|
||||
&& startMode == o.startMode
|
||||
&& endMode == o.endMode;
|
||||
}
|
||||
|
||||
public boolean equals (Object obj)
|
||||
{
|
||||
if (! (obj instanceof SimpleTimeZone))
|
||||
return false;
|
||||
SimpleTimeZone other = (SimpleTimeZone) obj;
|
||||
return getID() == other.getID() && hasSameRules(other);
|
||||
}
|
||||
|
||||
public int hashCode ()
|
||||
{
|
||||
// FIXME - this does not folow any spec (since none is public)!
|
||||
int hash = rawOffset;
|
||||
if (useDaylight)
|
||||
hash += dstSavings + startYear + startMode + endMode
|
||||
+ startDay + startDayOfWeek + startMonth + startTime
|
||||
+ endDay + endDayOfWeek + endMonth + endTime;
|
||||
return hash;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue