try {
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
Date PURE_GREGORIAN = new Date(Long.MIN_VALUE);
Date PURE_JULIAN = new Date(Long.MAX_VALUE);
GregorianCalendar cal = new GregorianCalendar(); for (int i = 0; i < DATA.length; i += 7) { int julian = DATA[i]; int year = DATA[i + 1]; int month = DATA[i + 2]; int dom = DATA[i + 3]; int year2, month2, dom2; long millis = ((long) julian - EPOCH_JULIAN) * ONE_DAY;
String s;
// Test Gregorian computation
cal.setGregorianChange(PURE_GREGORIAN);
cal.clear();
cal.set(year, month, dom); long calMillis = cal.getTime().getTime(); long delta = calMillis - millis;
cal.setTime(new Date(millis));
year2 = cal.get(YEAR);
month2 = cal.get(MONTH);
dom2 = cal.get(DAY_OF_MONTH);
s = "G " + year + "-" + (month + 1 - JANUARY) + "-" + dom
+ " => " + calMillis
+ " (" + ((float) delta / ONE_DAY) + " day delta) => "
+ year2 + "-" + (month2 + 1 - JANUARY) + "-" + dom2; if (delta != 0 || year != year2 || month != month2
|| dom != dom2) {
errln(s + " FAIL");
} else {
logln(s);
}
cal.setGregorianChange(new Date(1582 - 1900, OCTOBER, 15));
auxMapping(cal, 1582, OCTOBER, 4);
auxMapping(cal, 1582, OCTOBER, 15);
auxMapping(cal, 1582, OCTOBER, 16); for (int y = 800; y < 3000; y += 1 + 100 * Math.random()) { for (int m = JANUARY; m <= DECEMBER; ++m) {
auxMapping(cal, y, m, 15);
}
}
} finally {
TimeZone.setDefault(saveZone);
}
} privatevoid auxMapping(Calendar cal, int y, int m, int d) {
cal.clear();
cal.set(y, m, d); long millis = cal.getTime().getTime();
cal.setTime(new Date(millis)); int year2 = cal.get(YEAR); int month2 = cal.get(MONTH); int dom2 = cal.get(DAY_OF_MONTH); if (y != year2 || m != month2 || dom2 != d) {
errln("Round-trip failure: " + y + "-" + (m + 1) + "-" + d + " =>ms=> "
+ year2 + "-" + (month2 + 1) + "-" + dom2);
}
}
@SuppressWarnings("deprecation") publicvoid TestGenericAPI() {
Locale locale = Locale.getDefault(); if (!TestUtils.usesGregorianCalendar(locale)) {
logln("Skipping this test because locale is " + locale); return;
}
String str;
Date when = new Date(90, APRIL, 15);
String tzid = "TestZone"; int tzoffset = 123400;
SimpleTimeZone zone = new SimpleTimeZone(tzoffset, tzid);
Calendar cal = Calendar.getInstance((SimpleTimeZone) zone.clone());
if (!zone.equals(cal.getTimeZone())) {
errln("FAIL: Calendar.getTimeZone failed");
}
// Roll back to January
cal.roll(MONTH, 1 + DECEMBER - cal.get(MONTH)); if (cal.equals(cal2)
|| cal2.before(cal)
|| cal.after(cal2)) {
errln("FAIL: equals/before/after failed");
}
// C++ only /* TimeZone z = cal.orphanTimeZone(); if(z.getID(str)!=tzid|| z.getRawOffset()!=tzoffset) errln("FAIL:orphanTimeZonefailed");
*/ for (int i = 0; i < 2; ++i) { boolean lenient = (i > 0);
cal.setLenient(lenient); if (lenient != cal.isLenient()) {
errln("FAIL: setLenient/isLenient failed");
} // Later: Check for lenient behavior
}
int i; for (i = SUNDAY; i <= SATURDAY; ++i) {
cal.setFirstDayOfWeek(i); if (cal.getFirstDayOfWeek() != i) {
errln("FAIL: set/getFirstDayOfWeek failed");
}
}
for (i = 0; i <= 7; ++i) {
cal.setMinimalDaysInFirstWeek(i); if (cal.getMinimalDaysInFirstWeek() != i) {
errln("FAIL: set/getFirstDayOfWeek failed");
}
}
for (i = 0; i < FIELD_COUNT; ++i) { if (cal.getMinimum(i) != cal.getGreatestMinimum(i)) {
errln("FAIL: getMinimum doesn't match getGreatestMinimum for field " + i);
} if (cal.getLeastMaximum(i) > cal.getMaximum(i)) {
errln("FAIL: getLeastMaximum larger than getMaximum for field " + i);
} if (cal.getMinimum(i) >= cal.getMaximum(i)) {
errln("FAIL: getMinimum not less than getMaximum for field " + i);
}
}
cal.getTime(); for (i = 0; i < FIELD_COUNT; ++i) { switch (i) { case YEAR: case MONTH: case DATE: case HOUR_OF_DAY: case MINUTE: case SECOND: if (!cal.isSet(i)) {
errln("FAIL: !Calendar.isSet test failed: " + calendarFieldNames[i]);
} break; default: if (cal.isSet(i)) {
errln("FAIL: Calendar.isSet test failed: " + calendarFieldNames[i]);
}
}
cal.clear(i); if (cal.isSet(i)) {
errln("FAIL: Calendar.clear/isSet failed");
}
}
// delete cal; // delete cal2;
Locale[] loc = Calendar.getAvailableLocales(); long count = loc.length; if (count < 1 || loc == null) {
errln("FAIL: getAvailableLocales failed");
} else { for (i = 0; i < count; ++i) {
cal = Calendar.getInstance(loc[i]); // delete cal;
}
}
cal = Calendar.getInstance(TimeZone.getDefault(), Locale.ENGLISH); // delete cal;
cal = Calendar.getInstance(zone, Locale.ENGLISH); // delete cal;
GregorianCalendar gc = new GregorianCalendar(zone); // delete gc;
gc = new GregorianCalendar(Locale.ENGLISH); // delete gc;
gc = new GregorianCalendar(Locale.ENGLISH); // delete gc;
gc = new GregorianCalendar(zone, Locale.ENGLISH); // delete gc;
gc = new GregorianCalendar(zone); // delete gc;
gc = new GregorianCalendar(1998, 10, 14, 21, 43); if (gc.getTime().getTime() != new Date(98, 10, 14, 21, 43).getTime()) {
errln("FAIL: new GregorianCalendar(ymdhm) failed");
} // delete gc;
gc = new GregorianCalendar(1998, 10, 14, 21, 43, 55); if (gc.getTime().getTime() != new Date(98, 10, 14, 21, 43, 55).getTime()) {
errln("FAIL: new GregorianCalendar(ymdhms) failed");
}
void dowTest(boolean lenient) {
GregorianCalendar cal = new GregorianCalendar();
cal.set(1997, AUGUST, 12); // Wednesday
cal.getTime(); // Force update
cal.setLenient(lenient);
cal.set(1996, DECEMBER, 1); // Set the date to be December 1, 1996 int dow = cal.get(DAY_OF_WEEK); int min = cal.getMinimum(DAY_OF_WEEK); int max = cal.getMaximum(DAY_OF_WEEK); if (dow < min || dow > max) {
errln("FAIL: Day of week " + dow + " out of range");
} if (dow != SUNDAY) {
errln("FAIL2: Day of week should be SUNDAY; is " + dow + ": " + cal.getTime());
} if (min != SUNDAY || max != SATURDAY) {
errln("FAIL: Min/max bad");
}
}
// Verify that the clone method produces distinct objects with no // unintentionally shared fields. publicvoid TestClonesUnique908() {
Calendar c = Calendar.getInstance();
Calendar d = (Calendar) c.clone();
c.set(MILLISECOND, 123);
d.set(MILLISECOND, 456); if (c.get(MILLISECOND) != 123
|| d.get(MILLISECOND) != 456) {
errln("FAIL: Clones share fields");
}
}
// Verify effect of Gregorian cutoff value
@SuppressWarnings("deprecation") publicvoid TestGregorianChange768() { boolean b;
GregorianCalendar c = new GregorianCalendar();
logln("With cutoff " + c.getGregorianChange());
logln(" isLeapYear(1800) = " + (b = c.isLeapYear(1800)));
logln(" (should be FALSE)"); if (b != false) {
errln("FAIL");
}
c.setGregorianChange(new Date(0, 0, 1)); // Jan 1 1900
logln("With cutoff " + c.getGregorianChange());
logln(" isLeapYear(1800) = " + (b = c.isLeapYear(1800)));
logln(" (should be TRUE)"); if (b != true) {
errln("FAIL");
}
}
// Test the correct behavior of the disambiguation algorithm. publicvoid TestDisambiguation765() throws Exception {
Locale savedLocale = Locale.getDefault(); try {
Locale.setDefault(Locale.US);
Calendar c = Calendar.getInstance();
c.setLenient(false);
c.clear();
c.set(YEAR, 1997);
c.set(DAY_OF_WEEK, TUESDAY);
c.set(WEEK_OF_YEAR, 2);
verify765("1997 Tuesday in week 2 of year = ", c, 1997, JANUARY, 7);
c.clear();
c.set(YEAR, 1997);
c.set(DAY_OF_WEEK, TUESDAY);
c.set(WEEK_OF_YEAR, 10);
verify765("1997 Tuesday in week 10 of year = ", c, 1997, MARCH, 4);
try {
c.clear();
c.set(YEAR, 1997);
c.set(DAY_OF_WEEK, TUESDAY);
c.set(WEEK_OF_YEAR, 0);
verify765("1997 Tuesday in week 0 of year = ", c, 1996, DECEMBER, 24); thrownew Exception("Fail: WEEK_OF_YEAR 0 should be illegal");
} catch (IllegalArgumentException ex) {
}
} finally {
Locale.setDefault(savedLocale);
}
}
void verify765(String msg, Calendar c, int year, int month, int day) { if (c.get(YEAR) == year
&& c.get(MONTH) == month
&& c.get(DATE) == day) {
logln("PASS: " + msg + c.getTime());
} else {
errln("FAIL: " + msg + c.getTime()
+ "; expected "
+ year + "/" + (month + 1) + "/" + day);
}
}
// Called when e expected to be non-null void verify765(String msg, IllegalArgumentException e) { if (e == null) {
errln("FAIL: No IllegalArgumentException for " + msg);
} else {
logln("PASS: " + msg + "IllegalArgument as expected");
}
}
// Test the behavior of GMT vs. local time publicvoid TestGMTvsLocal4064654() {
Locale locale = Locale.getDefault(); if (!TestUtils.usesGregorianCalendar(locale)) {
logln("Skipping this test because locale is " + locale); return;
}
// Sample output 1: // % /usr/local/java/jdk1.1.3/solaris/bin/java test 1997 1 1 12 0 0 // date = Wed Jan 01 04:00:00 PST 1997 // offset for Wed Jan 01 04:00:00 PST 1997= -8hr
test4064654(1997, 1, 1, 12, 0, 0);
// Note that in sample output 2 according to the offset, the gmt time // of the result would be 1997 4 16 17 30 0 which is different from the // input of 1997 4 16 18 30 0.
test4064654(1997, 4, 16, 18, 30, 0);
} void test4064654(int yr, int mo, int dt, int hr, int mn, int sc) {
Date date;
Calendar gmtcal = Calendar.getInstance();
gmtcal.setTimeZone(TimeZone.getTimeZone("Africa/Casablanca"));
gmtcal.set(yr, mo - 1, dt, hr, mn, sc);
gmtcal.set(MILLISECOND, 0);
date = gmtcal.getTime();
logln("date = " + date);
Calendar cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));
cal.setTime(date);
int offset = cal.getTimeZone().getOffset(cal.get(ERA),
cal.get(YEAR),
cal.get(MONTH),
cal.get(DATE),
cal.get(DAY_OF_WEEK),
cal.get(MILLISECOND));
logln("offset for " + date + "= " + (offset / 1000 / 60 / 60.0) + "hr");
int utc = ((cal.get(HOUR_OF_DAY) * 60
+ cal.get(MINUTE)) * 60
+ cal.get(SECOND)) * 1000
+ cal.get(MILLISECOND) - offset;
// Verify that add and set work regardless of the order in which // they are called. publicvoid TestAddSetOrder621() {
@SuppressWarnings("deprecation")
Date d = new Date(97, 4, 14, 13, 23, 45);
Calendar cal = Calendar.getInstance();
cal.setTime(d);
cal.add(DATE, -5);
cal.set(HOUR_OF_DAY, 0);
cal.set(MINUTE, 0);
cal.set(SECOND, 0); // ma feb 03 00:00:00 GMT+00:00 1997
String s = cal.getTime().toString();
cal = Calendar.getInstance();
cal.setTime(d);
cal.set(HOUR_OF_DAY, 0);
cal.set(MINUTE, 0);
cal.set(SECOND, 0);
cal.add(DATE, -5); // ma feb 03 13:11:06 GMT+00:00 1997
String s2 = cal.getTime().toString();
if (s.equals(s2)) {
logln("Pass: " + s + " == " + s2);
} else {
errln("FAIL: " + s + " != " + s2);
}
}
// Verify that add works. publicvoid TestAdd520() { int y = 1997, m = FEBRUARY, d = 1;
GregorianCalendar temp = new GregorianCalendar(y, m, d);
check520(temp, y, m, d);
temp.add(YEAR, 1);
y++;
check520(temp, y, m, d);
temp.add(MONTH, 1);
m++;
check520(temp, y, m, d);
temp.add(DATE, 1);
d++;
check520(temp, y, m, d);
temp.add(DATE, 2);
d += 2;
check520(temp, y, m, d);
temp.add(DATE, 28);
d = 1;
++m;
check520(temp, y, m, d);
}
void check520(Calendar c, int y, int m, int d) { if (c.get(YEAR) != y
|| c.get(MONTH) != m
|| c.get(DATE) != d) {
errln("FAILURE: Expected YEAR/MONTH/DATE of "
+ y + "/" + (m + 1) + "/" + d
+ "; got "
+ c.get(YEAR) + "/"
+ (c.get(MONTH) + 1) + "/"
+ c.get(DATE));
} else {
logln("Confirmed: "
+ y + "/" + (m + 1) + "/" + d);
}
}
// Verify that setting fields works. This test fails when an exception is thrown. publicvoid TestFieldSet4781() { try {
GregorianCalendar g = new GregorianCalendar();
GregorianCalendar g2 = new GregorianCalendar(); // At this point UTC value is set, various fields are not. // Now set to noon.
g2.set(HOUR, 12);
g2.set(MINUTE, 0);
g2.set(SECOND, 0); // At this point the object thinks UTC is NOT set, but fields are set. // The following line will result in IllegalArgumentException because // it thinks the YEAR is set and it is NOT. if (g2.equals(g)) {
logln("Same");
} else {
logln("Different");
}
} catch (IllegalArgumentException e) {
errln("Unexpected exception seen: " + e);
}
}
// Test serialization of a Calendar object publicvoid TestSerialize337() {
Calendar cal = Calendar.getInstance();
boolean ok = false;
try {
FileOutputStream f = new FileOutputStream(FILENAME);
ObjectOutput s = new ObjectOutputStream(f);
s.writeObject(PREFIX);
s.writeObject(cal);
s.writeObject(POSTFIX);
f.close();
FileInputStream in = new FileInputStream(FILENAME);
ObjectInputStream t = new ObjectInputStream(in);
String pre = (String) t.readObject();
Calendar c = (Calendar) t.readObject();
String post = (String) t.readObject();
in.close();
ok = pre.equals(PREFIX)
&& post.equals(POSTFIX)
&& cal.equals(c);
// Try to zero out the seconds field publicvoid TestSecondsZero121() {
Calendar cal = new GregorianCalendar(); // Initialize with current date/time
cal.setTime(new Date()); // Round down to minute
cal.set(SECOND, 0);
Date d = cal.getTime();
String s = d.toString(); if (s.indexOf(":00 ") < 0) {
errln("Expected to see :00 in " + s);
}
}
// Try various sequences of add, set, and get method calls. publicvoid TestAddSetGet0610() { // // Error case 1: // - Upon initialization calendar fields, millis = System.currentTime // - After set is called fields are initialized, time is not // - Addition uses millis which are still *now* //
{
Calendar calendar = new GregorianCalendar();
calendar.set(1993, JANUARY, 4);
logln("1A) " + value(calendar));
calendar.add(DATE, 1);
String v = value(calendar);
logln("1B) " + v);
logln("--) 1993/0/5"); if (!v.equals(EXPECTED_0610)) {
errln("Expected " + EXPECTED_0610
+ "; saw " + v);
}
}
// // Error case 2: // - Upon initialization calendar fields set, millis = 0 // - Addition uses millis which are still 1970, 0, 1 //
{
Calendar calendar = new GregorianCalendar(1993, JANUARY, 4);
logln("2A) " + value(calendar));
calendar.add(DATE, 1);
String v = value(calendar);
logln("2B) " + v);
logln("--) 1993/0/5"); if (!v.equals(EXPECTED_0610)) {
errln("Expected " + EXPECTED_0610
+ "; saw " + v);
}
}
// // Error case 3: // - Upon initialization calendar fields, millis = 0 // - getTime( ) is called which forces the millis to be set // - Addition uses millis which are correct //
{
Calendar calendar = new GregorianCalendar(1993, JANUARY, 4);
logln("3A) " + value(calendar));
calendar.getTime();
calendar.add(DATE, 1);
String v = value(calendar);
logln("3B) " + v);
logln("--) 1993/0/5"); if (!v.equals(EXPECTED_0610)) {
errln("Expected " + EXPECTED_0610
+ "; saw " + v);
}
}
} static String value(Calendar calendar) { return (calendar.get(YEAR) + "/"
+ calendar.get(MONTH) + "/"
+ calendar.get(DATE));
} static String EXPECTED_0610 = "1993/0/5";
// Test that certain fields on a certain date are as expected. publicvoid TestFields060() { int year = 1997; int month = OCTOBER; //october int dDate = 22; //DAYOFWEEK should return 3 for Wednesday
GregorianCalendar calendar = null;
calendar = new GregorianCalendar(year, month, dDate); for (int i = 0; i < EXPECTED_FIELDS.length;) { int field = EXPECTED_FIELDS[i++]; int expected = EXPECTED_FIELDS[i++]; if (calendar.get(field) != expected) {
errln("Expected field " + field + " to have value " + expected
+ "; received " + calendar.get(field) + " instead");
}
}
} staticint[] EXPECTED_FIELDS = {
YEAR, 1997,
MONTH, OCTOBER,
DAY_OF_MONTH, 22,
DAY_OF_WEEK, WEDNESDAY,
DAY_OF_WEEK_IN_MONTH, 4,
DAY_OF_YEAR, 295};
// Verify that the fields are as expected (mostly zero) at the epoch start. // Note that we adjust for the default timezone to get most things to zero. publicvoid TestEpochStartFields() {
String[][] lt = {
{"en", "US", "US/Pacific"}, /* First day = 1, Minimum day = 1 */
{"en", "US", "America/Anchorage"}, /* First day = 1, Minimum day = 1 */
{"en", "TO", "Pacific/Tongatapu"}, /* First day = 1, Minimum day = 1 */
{"en", "MH", "Pacific/Majuro"}, /* First day = 1, Minimum day = 1 */
{"ja", "JP", "Asia/Tokyo"}, /* First day = 1, Minimum day = 1 */
{"iw", "IL", "Asia/Jerusalem"}, /* First day = 1, Minimum day = 1 */
{"hi", "IN", "Asia/Jakarta"}, /* First day = 1, Minimum day = 1 */
{"en", "GB", "Europe/London"}, /* First day = 2, Minimum day = 1 */
{"en", "GB", "GMT"}, /* First day = 2, Minimum day = 1 */
{"de", "DE", "Europe/Berlin"}, /* First day = 2, Minimum day = 4 */
{"ar", "EG", "Africa/Cairo"}}; /* First day = 7, Minimum day = 1 */
try { for (int j = 0; j < lt.length; j++) {
Locale l = Locale.of(lt[j][0], lt[j][1]);
TimeZone z = TimeZone.getTimeZone(lt[j][2]);
Locale.setDefault(l);
TimeZone.setDefault(z);
Calendar c = Calendar.getInstance();
Date d = new Date(-z.getRawOffset());
int val; int[] EPOCH_FIELDS = goldenData[j];
c.setTime(d);
boolean err = false; for (int i = 0; i < calendarFieldNames.length; ++i) { if ((val = c.get(i)) != EPOCH_FIELDS[i]) {
errln("Wrong value: " + val
+ " for field(" + calendarFieldNames[i]
+ "), expected: " + EPOCH_FIELDS[i]);
err = true;
}
} if (err) {
errln("Failed: \n\tDate=" + d + "\n\tTimeZone=" + z
+ "\n\tLocale=" + l + "\n\tCalendar=" + c);
}
}
} finally {
Locale.setDefault(savedLocale);
TimeZone.setDefault(savedTimeZone);
}
}
// Verify that as you add days to the calendar (e.g., 24 day periods), // the day of the week shifts in the expected pattern. publicvoid TestDOWProgression() {
Calendar cal
= new GregorianCalendar(1972, OCTOBER, 26);
marchByDelta(cal, 24); // Last parameter must be != 0 modulo 7
}
// Supply a delta which is not a multiple of 7. void marchByDelta(Calendar cal, int delta) {
Calendar cur = (Calendar) cal.clone(); int initialDOW = cur.get(DAY_OF_WEEK); int DOW, newDOW = initialDOW; do {
DOW = newDOW;
logln("DOW = " + DOW + " " + cur.getTime());
cur.add(DAY_OF_WEEK, delta);
newDOW = cur.get(DAY_OF_WEEK); int expectedDOW = 1 + (DOW + delta - 1) % 7; if (newDOW != expectedDOW) {
errln("Day of week should be " + expectedDOW
+ " instead of " + newDOW + " on " + cur.getTime()); return;
}
} while (newDOW != initialDOW);
}
publicvoid TestActualMinMax() {
Calendar cal = new GregorianCalendar(1967, MARCH, 10);
cal.setFirstDayOfWeek(SUNDAY);
cal.setMinimalDaysInFirstWeek(3);
if (cal.getActualMinimum(DAY_OF_MONTH) != 1) {
errln("Actual minimum date for 3/10/1967 should have been 1; got "
+ cal.getActualMinimum(DAY_OF_MONTH));
} if (cal.getActualMaximum(DAY_OF_MONTH) != 31) {
errln("Actual maximum date for 3/10/1967 should have been 31; got "
+ cal.getActualMaximum(DAY_OF_MONTH));
}
cal.set(MONTH, FEBRUARY); if (cal.getActualMaximum(DAY_OF_MONTH) != 28) {
errln("Actual maximum date for 2/10/1967 should have been 28; got "
+ cal.getActualMaximum(DAY_OF_MONTH));
} if (cal.getActualMaximum(DAY_OF_YEAR) != 365) {
errln("Number of days in 1967 should have been 365; got "
+ cal.getActualMaximum(DAY_OF_YEAR));
}
cal.set(YEAR, 1968); if (cal.getActualMaximum(DAY_OF_MONTH) != 29) {
errln("Actual maximum date for 2/10/1968 should have been 29; got "
+ cal.getActualMaximum(DAY_OF_MONTH));
} if (cal.getActualMaximum(DAY_OF_YEAR) != 366) {
errln("Number of days in 1968 should have been 366; got "
+ cal.getActualMaximum(DAY_OF_YEAR));
} // Using week settings of SUNDAY/3 (see above) if (cal.getActualMaximum(WEEK_OF_YEAR) != 52) {
errln("Number of weeks in 1968 should have been 52; got "
+ cal.getActualMaximum(WEEK_OF_YEAR));
}
cal.set(YEAR, 1976); // Using week settings of SUNDAY/3 (see above) if (cal.getActualMaximum(WEEK_OF_YEAR) != 53) {
errln("Number of weeks in 1976 should have been 53; got "
+ cal.getActualMaximum(WEEK_OF_YEAR));
}
}
publicvoid TestRoll() {
Calendar cal = new GregorianCalendar(1997, JANUARY, 31);
for (int i = 0; i < dayValues2.length; i++) {
Calendar cal2 = (Calendar) cal.clone();
cal2.roll(YEAR, i); if (cal2.get(DAY_OF_MONTH) != dayValues2[i] || cal2.get(MONTH)
!= monthValues[i]) {
errln("Rolling the year in 2/29/1996 up by " + i + " should have yielded "
+ (monthValues[i] + 1) + "/" + dayValues2[i] + "/"
+ (1996 + i) + ", but actually yielded "
+ (cal2.get(MONTH) + 1) + "/"
+ cal2.get(DAY_OF_MONTH) + "/" + (1996 + i) + ".");
}
}
// Test rolling hour of day
cal.set(HOUR_OF_DAY, 0);
cal.roll(HOUR_OF_DAY, -2); int f = cal.get(HOUR_OF_DAY); if (f != 22) {
errln("Rolling HOUR_OF_DAY=0 delta=-2 gave " + f + " Wanted 22");
}
cal.roll(HOUR_OF_DAY, 5);
f = cal.get(HOUR_OF_DAY); if (f != 3) {
errln("Rolling HOUR_OF_DAY=22 delta=5 gave " + f + " Wanted 3");
}
cal.roll(HOUR_OF_DAY, 21);
f = cal.get(HOUR_OF_DAY); if (f != 0) {
errln("Rolling HOUR_OF_DAY=3 delta=21 gave " + f + " Wanted 0");
}
// Test rolling hour
cal.set(HOUR_OF_DAY, 0);
cal.roll(HOUR, -2);
f = cal.get(HOUR); if (f != 10) {
errln("Rolling HOUR=0 delta=-2 gave " + f + " Wanted 10");
}
cal.roll(HOUR, 5);
f = cal.get(HOUR); if (f != 3) {
errln("Rolling HOUR=10 delta=5 gave " + f + " Wanted 3");
}
cal.roll(HOUR, 9);
f = cal.get(HOUR); if (f != 0) {
errln("Rolling HOUR=3 delta=9 gave " + f + " Wanted 0");
}
}
publicvoid TestClonedSharedZones() throws NoSuchFieldException, IllegalAccessException {
Field zone = Calendar.class.getDeclaredField("zone");
zone.setAccessible(true);
Field sharedZone = Calendar.class.getDeclaredField("sharedZone");
sharedZone.setAccessible(true);
// create a new calendar with any date, and clone it.
Calendar c1 = new GregorianCalendar();
Calendar c2 = (Calendar) c1.clone();
// c1 should have a shared zone if (!sharedZone.getBoolean(c1)) {
errln("Failed : c1.sharedZone == false");
} else { // c2 should have a shared zone too if (!sharedZone.getBoolean(c2)) {
errln("Failed : c2.sharedZone == false");
} elseif (zone.get(c1) != zone.get(c2)) {
errln("Failed : c1.zone != c2.zone");
}
}
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.