/* * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions.
*/
@SuppressWarnings("deprecation") publicvoid Test4073215() {
SimpleTimeZone z = new SimpleTimeZone(0, "GMT"); if (z.useDaylightTime()) {
errln("Fail: Fix test to start with non-DST zone");
}
z.setStartRule(Calendar.FEBRUARY, 1, Calendar.SUNDAY, 0);
z.setEndRule(Calendar.MARCH, -1, Calendar.SUNDAY, 0); if (!z.useDaylightTime()) {
errln("Fail: DST not active");
} if (z.inDaylightTime(new Date(97, Calendar.JANUARY, 31)) ||
!z.inDaylightTime(new Date(97, Calendar.MARCH, 1)) ||
z.inDaylightTime(new Date(97, Calendar.MARCH, 31))) {
errln("Fail: DST not working as expected");
}
}
/** * The expected behavior of TimeZone around the boundaries is: * (Assume transition time of 2:00 AM) * day of onset 1:59 AM STD = display name 1:59 AM ST * 2:00 AM STD = display name 3:00 AM DT * day of end 0:59 AM STD = display name 1:59 AM DT * 1:00 AM STD = display name 1:00 AM ST
*/ publicvoid Test4084933() { // test both SimpleTimeZone and ZoneInfo objects. // @since 1.4
sub4084933(getPST());
sub4084933(TimeZone.getTimeZone("PST"));
}
publicvoid Test4096952() {
String[] ZONES = { "GMT", "MET", "IST" }; boolean pass = true; try { for (int i=0; i<ZONES.length; ++i) {
TimeZone zone = TimeZone.getTimeZone(ZONES[i]); if (!zone.getID().equals(ZONES[i]))
errln("Fail: Test broken; zones not instantiating");
publicvoid Test4109314() {
Locale locale = Locale.getDefault(); if (!TestUtils.usesGregorianCalendar(locale)) {
logln("Skipping this test because locale is " + locale); return;
}
// test both SimpleTimeZone and ZoneInfo objects. // @since 1.4
sub4109314(getPST());
sub4109314(TimeZone.getTimeZone("PST"));
}
@SuppressWarnings("deprecation") privatevoid sub4109314(TimeZone PST) {
GregorianCalendar testCal = (GregorianCalendar)Calendar.getInstance();
Object[] testData = {
PST, new Date(98,Calendar.APRIL,4,22,0), new Date(98, Calendar.APRIL, 5,6,0),
PST, new Date(98,Calendar.OCTOBER,24,22,0), new Date(98,Calendar.OCTOBER,25,6,0),
}; boolean pass=true; for (int i=0; i<testData.length; i+=3) {
testCal.setTimeZone((TimeZone) testData[i]); long t = ((Date)testData[i+1]).getTime();
Date end = (Date) testData[i+2]; while (t < end.getTime()) {
testCal.setTime(new Date(t)); if (!checkCalendar314(testCal, (TimeZone) testData[i]))
pass = false;
t += 60*60*1000L;
}
} if (!pass) errln("Fail: TZ API inconsistent");
}
int tzOffset, tzRawOffset; Float tzOffsetFloat,tzRawOffsetFloat; // Here is where the user made an error. They were passing in the value of // the MILLSECOND field; you need to pass in the millis in the day in STANDARD // time. int millis = testCal.get(Calendar.MILLISECOND) +
1000 * (testCal.get(Calendar.SECOND) +
60 * (testCal.get(Calendar.MINUTE) +
60 * (testCal.get(Calendar.HOUR_OF_DAY)))) -
testCal.get(Calendar.DST_OFFSET);
/* Fix up millis to be in range. ASSUME THAT WE ARE NOT AT THE * BEGINNING OR END OF A MONTH. We must add this code because * getOffset() has been changed to be more strict about the parameters * it receives -- it turns out that this test was passing in illegal
* values. */ int date = testCal.get(Calendar.DATE); int dow = testCal.get(Calendar.DAY_OF_WEEK); while (millis < 0) {
millis += ONE_DAY;
--date;
dow = Calendar.SUNDAY + ((dow - Calendar.SUNDAY + 6) % 7);
} while (millis >= ONE_DAY) {
millis -= ONE_DAY;
++date;
dow = Calendar.SUNDAY + ((dow - Calendar.SUNDAY + 1) % 7);
}
if (passed)
output += " "; else
output += "ERROR";
if (passed) logln(output); else errln(output); return passed;
}
/** * CANNOT REPRODUDE * * Yet another _alleged_ bug in TimeZone.getOffset(), a method that never * should have been made public. It's simply too hard to use correctly. * * The original test code failed to do the following: * (1) Call Calendar.setTime() before getting the fields! * (2) Use the right millis (as usual) for getOffset(); they were passing * in the MILLIS field, instead of the STANDARD MILLIS IN DAY. * When you fix these two problems, the test passes, as expected.
*/ publicvoid Test4126678() {
Locale locale = Locale.getDefault(); if (!TestUtils.usesGregorianCalendar(locale)) {
logln("Skipping this test because locale is " + locale); return;
}
// Note: this test depends on the PST time zone.
TimeZone initialZone = TimeZone.getDefault();
// test both SimpleTimeZone and ZoneInfo objects. // @since 1.4
sub4126678(getPST());
sub4126678(TimeZone.getTimeZone("PST"));
// restore the initial time zone so that this test case // doesn't affect the others.
TimeZone.setDefault(initialZone);
}
Date dt = new Date(1998-1900, Calendar.APRIL, 5, 10, 0); // the dt value is local time in PST. if (!tz.inDaylightTime(dt))
errln("We're not in Daylight Savings Time and we should be.\n");
cal.setTime(dt); int era = cal.get(Calendar.ERA); int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MONTH); int day = cal.get(Calendar.DATE); int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); int millis = cal.get(Calendar.MILLISECOND) +
(cal.get(Calendar.SECOND) +
(cal.get(Calendar.MINUTE) +
(cal.get(Calendar.HOUR) * 60) * 60) * 1000) -
cal.get(Calendar.DST_OFFSET);
long offset = tz.getOffset(era, year, month, day, dayOfWeek, millis); long raw_offset = tz.getRawOffset(); if (offset == raw_offset) {
errln("Offsets should not match when in DST");
}
}
/** * TimeZone.getAvailableIDs(int) throws exception for certain values, * due to a faulty constant in TimeZone.java.
*/ publicvoid Test4151406() { int max = 0; for (int h=-28; h<=30; ++h) { // h is in half-hours from GMT; rawoffset is in millis int rawoffset = h * 1800000; int hh = (h<0) ? -h : h;
String hname = ((h<0) ? "GMT-" : "GMT+") +
((hh/2 < 10) ? "0" : "") +
(hh/2) + ':' +
((hh%2==0) ? "00" : "30"); try {
String[] ids = TimeZone.getAvailableIDs(rawoffset); if (ids.length > max) max = ids.length;
logln(hname + ' ' + ids.length +
((ids.length > 0) ? (" e.g. " + ids[0]) : ""));
} catch (Exception e) {
errln(hname + ' ' + "Fail: " + e);
}
}
logln("Maximum zones per offset = " + max);
}
publicvoid Test4151429() { try {
TimeZone tz = TimeZone.getTimeZone("GMT");
String name = tz.getDisplayName(true, Integer.MAX_VALUE,
Locale.getDefault());
errln("IllegalArgumentException not thrown by TimeZone.getDisplayName()");
} catch(IllegalArgumentException e) {}
}
/** * SimpleTimeZone accepts illegal DST savings values. These values * must be non-zero. There is no upper limit at this time.
*/ publicvoid Test4154525() { finalint GOOD = 1, BAD = 0; int[] DATA = {
1, GOOD,
0, BAD,
-1, BAD,
60*60*1000, GOOD,
Integer.MIN_VALUE, BAD, // Integer.MAX_VALUE, ?, // no upper limit on DST savings at this time
}; for (int i=0; i<DATA.length; i+=2) { int savings = DATA[i]; boolean valid = DATA[i+1] == GOOD;
String method = null; for (int j=0; j<2; ++j) { try { switch (j) { case 0:
method = "constructor";
SimpleTimeZone z = new SimpleTimeZone(0, "id",
Calendar.JANUARY, 1, 0, 0,
Calendar.MARCH, 1, 0, 0,
savings); // <- what we're interested in break; case 1:
method = "setDSTSavings()";
z = new SimpleTimeZone(0, "GMT");
z.setDSTSavings(savings); break;
} if (valid) {
logln("Pass: DST savings of " + savings + " accepted by " + method);
} else {
errln("Fail: DST savings of " + savings + " accepted by " + method);
}
} catch (IllegalArgumentException e) { if (valid) {
errln("Fail: DST savings of " + savings + " to " + method + " gave " + e);
} else {
logln("Pass: DST savings of " + savings + " to " + method + " gave " + e);
}
}
}
}
}
/** * SimpleTimeZone.hasSameRules() doesn't work for zones with no DST * and different DST parameters.
*/ publicvoid Test4154537() { // tz1 and tz2 have no DST and different rule parameters
SimpleTimeZone tz1 = new SimpleTimeZone(0, "1", 0, 0, 0, 0, 2, 0, 0, 0);
SimpleTimeZone tz2 = new SimpleTimeZone(0, "2", 1, 0, 0, 0, 3, 0, 0, 0); // tza and tzA have the same rule params
SimpleTimeZone tza = new SimpleTimeZone(0, "a", 0, 1, 0, 0, 3, 2, 0, 0);
SimpleTimeZone tzA = new SimpleTimeZone(0, "A", 0, 1, 0, 0, 3, 2, 0, 0); // tzb differs from tza
SimpleTimeZone tzb = new SimpleTimeZone(0, "b", 0, 1, 0, 0, 3, 1, 0, 0); if (tz1.useDaylightTime() || tz2.useDaylightTime() ||
!tza.useDaylightTime() || !tzA.useDaylightTime() ||
!tzb.useDaylightTime()) {
errln("Test is broken -- rewrite it");
} if (!tza.hasSameRules(tzA) || tza.hasSameRules(tzb)) {
errln("Fail: hasSameRules() broken for zones with rules");
} if (!tz1.hasSameRules(tz2)) {
errln("Fail: hasSameRules() returns false for zones without rules");
errln("zone 1 = " + tz1);
errln("zone 2 = " + tz2);
}
}
/** * SimpleTimeZone constructors, setStartRule(), and setEndRule() don't * check for out-of-range arguments.
*/ publicvoid Test4154542() { finalint GOOD = 1; finalint BAD = 0;
// Must construct the Date object AFTER setting the default zone int[] p = (int[])DATA[j+1];
Date d = new Date(p[0], p[1], p[2], p[3], p[4]); boolean transitionExpected = ((Boolean)DATA[j+2]).booleanValue();
logln(tz.getID() + ":"); for (int i=0; i<4; ++i) {
zone[i] = fmt.format(d);
logln("" + i + ": " + d);
d = new Date(d.getTime() + ONE_HOUR);
} if (zone[0].equals(zone[1]) &&
(zone[1].equals(zone[2]) != transitionExpected) &&
zone[2].equals(zone[3])) {
logln("Ok: transition " + transitionExpected);
} else {
errln("Fail: boundary transition incorrect");
}
}
} finally { // restore the initial time zone so that this test case // doesn't affect the others.
TimeZone.setDefault(initialZone);
}
}
/** * TimeZone broken in last hour of year
*/ publicvoid Test4173604() { // test both SimpleTimeZone and ZoneInfo objects. // @since 1.4
sub4173604(getPST());
sub4173604(TimeZone.getTimeZone("PST"));
}
privatevoid sub4173604(TimeZone pst) { int o22 = pst.getOffset(1, 1998, 11, 31, Calendar.THURSDAY, 22*60*60*1000); int o23 = pst.getOffset(1, 1998, 11, 31, Calendar.THURSDAY, 23*60*60*1000); int o00 = pst.getOffset(1, 1999, 0, 1, Calendar.FRIDAY, 0); if (o22 != o23 || o22 != o00) {
errln("Offsets should be the same (for PST), but got: " + "12/31 22:00 " + o22 + ", 12/31 23:00 " + o23 + ", 01/01 00:00 " + o00);
}
GregorianCalendar cal = new GregorianCalendar();
cal.setTimeZone(pst);
cal.clear();
cal.set(1998, Calendar.JANUARY, 1); int lastDST = cal.get(Calendar.DST_OFFSET); int transitions = 0; int delta = 5; while (cal.get(Calendar.YEAR) < 2000) {
cal.add(Calendar.MINUTE, delta); if (cal.get(Calendar.DST_OFFSET) != lastDST) {
++transitions;
Calendar t = (Calendar)cal.clone();
t.add(Calendar.MINUTE, -delta);
logln(t.getTime() + " " + t.get(Calendar.DST_OFFSET));
logln(cal.getTime() + " " + (lastDST=cal.get(Calendar.DST_OFFSET)));
}
} if (transitions != 4) {
errln("Saw " + transitions + " transitions; should have seen 4");
}
}
/** * getDisplayName doesn't work with unusual savings/offsets.
*/
@SuppressWarnings("deprecation") publicvoid Test4176686() { // Construct a zone that does not observe DST but // that does have a DST savings (which should be ignored). int offset = 90 * 60000; // 1:30
SimpleTimeZone z1 = new SimpleTimeZone(offset, "_std_zone_");
z1.setDSTSavings(45 * 60000); // 0:45
// Construct a zone that observes DST for the first 6 months.
SimpleTimeZone z2 = new SimpleTimeZone(offset, "_dst_zone_");
z2.setDSTSavings(45 * 60000); // 0:45
z2.setStartRule(Calendar.JANUARY, 1, 0);
z2.setEndRule(Calendar.JULY, 1, 0);
// Also check DateFormat
DateFormat fmt1 = new SimpleDateFormat("z");
fmt1.setTimeZone(z1); // Format uses standard zone
DateFormat fmt2 = new SimpleDateFormat("z");
fmt2.setTimeZone(z2); // Format uses DST zone
Date dst = new Date(1970-1900, Calendar.FEBRUARY, 1); // Time in DST
Date std = new Date(1970-1900, Calendar.AUGUST, 1); // Time in standard
/** * SimpleTimeZone allows invalid DOM values.
*/ publicvoid Test4184229() {
SimpleTimeZone zone = null; try {
zone = new SimpleTimeZone(0, "A", 0, -1, 0, 0, 0, 0, 0, 0);
errln("Failed. No exception has been thrown for DOM -1 startDay");
} catch(IllegalArgumentException e) {
logln("(a) " + e.getMessage());
} try {
zone = new SimpleTimeZone(0, "A", 0, 0, 0, 0, 0, -1, 0, 0);
errln("Failed. No exception has been thrown for DOM -1 endDay");
} catch(IllegalArgumentException e) {
logln("(b) " + e.getMessage());
} try {
zone = new SimpleTimeZone(0, "A", 0, -1, 0, 0, 0, 0, 0, 0, 1000);
errln("Failed. No exception has been thrown for DOM -1 startDay +savings");
} catch(IllegalArgumentException e) {
logln("(c) " + e.getMessage());
} try {
zone = new SimpleTimeZone(0, "A", 0, 0, 0, 0, 0, -1, 0, 0, 1000);
errln("Failed. No exception has been thrown for DOM -1 endDay +savings");
} catch(IllegalArgumentException e) {
logln("(d) " + e.getMessage());
} // Make a valid constructor call for subsequent tests.
zone = new SimpleTimeZone(0, "A", 0, 1, 0, 0, 0, 1, 0, 0); try {
zone.setStartRule(0, -1, 0, 0);
errln("Failed. No exception has been thrown for DOM -1 setStartRule +savings");
} catch(IllegalArgumentException e) {
logln("(e) " + e.getMessage());
} try {
zone.setStartRule(0, -1, 0);
errln("Failed. No exception has been thrown for DOM -1 setStartRule");
} catch(IllegalArgumentException e) {
logln("(f) " + e.getMessage());
} try {
zone.setEndRule(0, -1, 0, 0);
errln("Failed. No exception has been thrown for DOM -1 setEndRule +savings");
} catch(IllegalArgumentException e) {
logln("(g) " + e.getMessage());
} try {
zone.setEndRule(0, -1, 0);
errln("Failed. No exception has been thrown for DOM -1 setEndRule");
} catch(IllegalArgumentException e) {
logln("(h) " + e.getMessage());
}
}
/** * SimpleTimeZone.getOffset() throws IllegalArgumentException when to get * of 2/29/1996 (leap day).
*/ publicvoid Test4208960 () { // test both SimpleTimeZone and ZoneInfo objects. // @since 1.4
sub4208960(getPST());
sub4208960(TimeZone.getTimeZone("PST"));
}
/** * 4966229: java.util.Date methods may works incorrect. * sun.util.calendar.ZoneInfo doesn't clone properly.
*/
@SuppressWarnings("deprecation") publicvoid Test4966229() {
TimeZone savedTZ = TimeZone.getDefault(); try {
TimeZone.setDefault(TimeZone.getTimeZone("GMT"));
Date d = new Date(2100-1900, 5, 1); // specify year >2037
TimeZone tz = TimeZone.getTimeZone("America/Los_Angeles");
Calendar cal = new GregorianCalendar(tz);
cal.setTime(d);
// Change the raw offset in tz int offset = tz.getRawOffset();
tz.setRawOffset(0);
TimeZone tz2 = (TimeZone) tz.clone();
Calendar cal2 = new GregorianCalendar(tz2);
cal2.setTime(d); int expectedHourOfDay = cal2.get(cal.HOUR_OF_DAY);
// Restore the GMT offset in tz which shouldn't affect tz2
tz.setRawOffset(offset);
cal2.setTime(d); int hourOfDay = cal2.get(cal.HOUR_OF_DAY); if (hourOfDay != expectedHourOfDay) {
errln("wrong hour of day: got: " + hourOfDay
+ ", expected: " + expectedHourOfDay);
}
} finally {
TimeZone.setDefault(savedTZ);
}
}
/** * 6433179: (tz) Incorrect DST end for America/Winnipeg and Canada/Central in 2038+
*/ publicvoid Test6433179() { // Use the old America/Winnipeg rule for testing. Note that // startMode is WALL_TIME for testing. It's actually // STANDARD_TIME, though. //Rule Winn 1966 2005 - Oct lastSun 2:00s 0 S //Rule Winn 1987 2005 - Apr Sun>=1 2:00s 1:00 D
TimeZone tz = new SimpleTimeZone(-6*ONE_HOUR, "America/Winnipeg",
Calendar.APRIL, 1, -Calendar.SUNDAY, 2*ONE_HOUR, SimpleTimeZone.WALL_TIME,
Calendar.OCTOBER, -1, Calendar.SUNDAY, 2*ONE_HOUR, SimpleTimeZone.STANDARD_TIME,
1*ONE_HOUR);
Calendar cal = Calendar.getInstance(tz, Locale.US);
cal.clear();
cal.set(2039, Calendar.OCTOBER, 1);
cal.getTime();
cal.set(cal.DAY_OF_WEEK, cal.SUNDAY);
cal.set(cal.DAY_OF_WEEK_IN_MONTH, -1);
cal.add(Calendar.HOUR_OF_DAY, 2); if (cal.get(cal.DST_OFFSET) == 0) {
errln("Should still be in DST.");
}
}
privatestaticfinalint ONE_HOUR = 60 * 60 * 1000; /** * Returns an instance of SimpleTimeZone for * "PST". (TimeZone.getTimeZone() no longer returns a * SimpleTimeZone object.) * @since 1.4
*/ private SimpleTimeZone getPST() { returnnew SimpleTimeZone(-8*ONE_HOUR, "PST",
Calendar.APRIL, 1, -Calendar.SUNDAY, 2*ONE_HOUR,
Calendar.OCTOBER, -1, Calendar.SUNDAY, 2*ONE_HOUR,
1*ONE_HOUR);
}
} //eof
¤ 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.0.57Bemerkung:
Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können
¤