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
This commit is contained in:
Bryce McKinlay 2001-07-26 11:21:45 +00:00 committed by Bryce McKinlay
parent 2cf50fd3a4
commit fa397ddafb
4 changed files with 112 additions and 71 deletions

View file

@ -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;