diff options
author | Bryce McKinlay <bryce@waitaki.otago.ac.nz> | 2001-07-26 11:21:45 +0000 |
---|---|---|
committer | Bryce McKinlay <bryce@gcc.gnu.org> | 2001-07-26 12:21:45 +0100 |
commit | fa397ddafb335eb0a67b08e014605bf5f9ab7cc5 (patch) | |
tree | f1888f988daa008faa5d48c983f690f3067987c7 /libjava/java/util | |
parent | 2cf50fd3a47891bb7ae2a0ada9254ae7ef236a28 (diff) | |
download | gcc-fa397ddafb335eb0a67b08e014605bf5f9ab7cc5.zip gcc-fa397ddafb335eb0a67b08e014605bf5f9ab7cc5.tar.gz gcc-fa397ddafb335eb0a67b08e014605bf5f9ab7cc5.tar.bz2 |
Calendar.java (set): Never recompute fields here.
* java/util/Calendar.java (set): Never recompute fields here. They
will already be set if someone set time explicitly, and it can cause
problems to do so. Don't invalidate AM_PM setting if HOUR is set.
* java/util/GregorianCalendar.java (computeTime): Don't ignore an
HOUR setting if AM_PM is set. Don't try to ensure the HOUR value is
sane.
* java/text/SimpleDateFormat.java (defaultCentury): New field.
(readObject): Call set2DigitYearStart if appropriate so that
defaultCentury is calculated.
(SimpleDateFormat): Don't bother clearing calendar here. Call
computeCenturyStart().
(set2DigitYearStart): Calculate and set defaultCentury.
(format): Don't clone the calendar. Use "calendar" not "theCalendar"
everywhere.
(parse): Likewise. If the pattern is "y" or "yy" and it found exactly
2 numeric digits, use the 80-20 heuristic to parse the value into a
default century based on defaultCenturyStart.
(computeCenturyStart): Rewritten. Call set2DigitYearStart().
From-SVN: r44395
Diffstat (limited to 'libjava/java/util')
-rw-r--r-- | libjava/java/util/Calendar.java | 5 | ||||
-rw-r--r-- | libjava/java/util/GregorianCalendar.java | 14 |
2 files changed, 11 insertions, 8 deletions
diff --git a/libjava/java/util/Calendar.java b/libjava/java/util/Calendar.java index 17f4c77..8149411 100644 --- a/libjava/java/util/Calendar.java +++ b/libjava/java/util/Calendar.java @@ -549,8 +549,6 @@ public abstract class Calendar implements Serializable, Cloneable */ public final void set(int field, int value) { - if (!areFieldsSet) - computeFields(); isTimeSet = false; fields[field] = value; isSet[field] = true; @@ -573,7 +571,6 @@ public abstract class Calendar implements Serializable, Cloneable isSet[HOUR] = false; break; case HOUR: - isSet[AM_PM] = false; isSet[HOUR_OF_DAY] = false; break; } @@ -587,8 +584,6 @@ public abstract class Calendar implements Serializable, Cloneable */ public final void set(int year, int month, int date) { - if (!areFieldsSet) - computeFields(); isTimeSet = false; fields[YEAR] = year; fields[MONTH] = month; diff --git a/libjava/java/util/GregorianCalendar.java b/libjava/java/util/GregorianCalendar.java index 1a8d073..2c68907 100644 --- a/libjava/java/util/GregorianCalendar.java +++ b/libjava/java/util/GregorianCalendar.java @@ -373,9 +373,17 @@ public class GregorianCalendar extends Calendar year = 1 - year; int[] daysOfYear = getDayOfYear(year); - int hour = isSet[HOUR_OF_DAY] ? fields[HOUR_OF_DAY] - : (isSet[HOUR] && isSet[AM_PM] - ? fields[AM_PM] * 12 + (fields[HOUR] % 12) : 0); + + int hour = 0; + if (isSet[HOUR_OF_DAY]) + hour = fields[HOUR_OF_DAY]; + else if (isSet[HOUR]) + { + hour = fields[HOUR]; + if (isSet[AM_PM] && fields[AM_PM] == PM) + hour += 12; + } + int minute = isSet[MINUTE] ? fields[MINUTE] : 0; int second = isSet[SECOND] ? fields[SECOND] : 0; int millis = isSet[MILLISECOND] ? fields[MILLISECOND] : 0; |