mirror of
https://github.com/unicode-org/icu.git
synced 2025-04-15 01:42:37 +00:00
ICU-4484 fix serialization compatibility with 3.2
X-SVN-Rev: 17566
This commit is contained in:
parent
346daeb6c1
commit
be33f1c693
3 changed files with 93 additions and 83 deletions
|
@ -31,6 +31,8 @@ import java.io.IOException;
|
|||
*/
|
||||
public class JDKTimeZone extends TimeZone {
|
||||
|
||||
private static final long serialVersionUID = -3724907649889455280L;
|
||||
|
||||
/**
|
||||
* The java.util.TimeZone wrapped by this object. Must not be null.
|
||||
*/
|
||||
|
@ -83,6 +85,7 @@ public class JDKTimeZone extends TimeZone {
|
|||
*/
|
||||
public int getOffset(int era, int year, int month, int day,
|
||||
int dayOfWeek, int milliseconds) {
|
||||
|
||||
return unwrap().getOffset(era, year, month, day,
|
||||
dayOfWeek, milliseconds);
|
||||
}
|
||||
|
|
62
icu4j/src/com/ibm/icu/util/STZInfo.java
Normal file
62
icu4j/src/com/ibm/icu/util/STZInfo.java
Normal file
|
@ -0,0 +1,62 @@
|
|||
/*
|
||||
* Copyright (C) 2005, International Business Machines
|
||||
* Corporation and others. All Rights Reserved.
|
||||
*/
|
||||
|
||||
package com.ibm.icu.util;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
final class STZInfo implements Serializable {
|
||||
void setStart(int sm, int sdwm, int sdw, int st, int sdm, boolean sa) {
|
||||
this.sm = sm;
|
||||
this.sdwm = sdwm;
|
||||
this.sdw = sdw;
|
||||
this.st = st;
|
||||
this.sdm = sdm;
|
||||
this.sa = sa;
|
||||
}
|
||||
|
||||
void setEnd(int em, int edwm, int edw, int et, int edm, boolean ea) {
|
||||
this.em = em;
|
||||
this.edwm = edwm;
|
||||
this.edw = edw;
|
||||
this.et = et;
|
||||
this.edm = edm;
|
||||
this.ea = ea;
|
||||
}
|
||||
|
||||
void applyTo(java.util.SimpleTimeZone stz) {
|
||||
if (sy != -1) {
|
||||
stz.setStartYear(sy);
|
||||
}
|
||||
if (sm != -1) {
|
||||
if (sdm == -1) {
|
||||
stz.setStartRule(sm, sdwm, sdw, st);
|
||||
} else if (sdw == -1) {
|
||||
stz.setStartRule(sm, sdm, st);
|
||||
} else {
|
||||
stz.setStartRule(sm, sdm, sdw, st, sa);
|
||||
}
|
||||
}
|
||||
if (em != -1) {
|
||||
if (edm == -1) {
|
||||
stz.setEndRule(em, edwm, edw, et);
|
||||
} else if (edw == -1) {
|
||||
stz.setEndRule(em, edm, et);
|
||||
} else {
|
||||
stz.setEndRule(em, edm, edw, et, ea);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int sy = -1;
|
||||
int sm = -1, sdwm, sdw, st, sdm;
|
||||
boolean sa;
|
||||
int em = -1, edwm, edw, et, edm;
|
||||
boolean ea;
|
||||
}
|
||||
|
|
@ -27,6 +27,8 @@ import java.io.IOException;
|
|||
* @stable ICU 2.0
|
||||
*/
|
||||
public class SimpleTimeZone extends JDKTimeZone {
|
||||
private static final long serialVersionUID = -7034676239311322769L;
|
||||
|
||||
/**
|
||||
* Constructs a SimpleTimeZone with the given base time zone offset from GMT
|
||||
* and time zone ID. Timezone IDs can be obtained from
|
||||
|
@ -110,17 +112,9 @@ public class SimpleTimeZone extends JDKTimeZone {
|
|||
|
||||
raw = rawOffset;
|
||||
|
||||
sm = startMonth;
|
||||
sdwm = startDay;
|
||||
sdw = startDayOfWeek;
|
||||
st = startTime;
|
||||
sdm = -1;
|
||||
|
||||
em = endMonth;
|
||||
edwm = endDay;
|
||||
edw = endDayOfWeek;
|
||||
et = endTime;
|
||||
edm = -1;
|
||||
STZInfo xinfo = getSTZInfo();
|
||||
xinfo.setStart(startMonth, startDay, startDayOfWeek, startTime, -1, false);
|
||||
xinfo.setEnd(endMonth, endDay, endDayOfWeek, endTime, -1, false);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -140,19 +134,11 @@ public class SimpleTimeZone extends JDKTimeZone {
|
|||
endDay, endDayOfWeek, endTime, dstSavings));
|
||||
|
||||
raw = rawOffset;
|
||||
dst = dstSavings;
|
||||
dst = dstSavings;
|
||||
|
||||
sm = startMonth;
|
||||
sdwm = startDay;
|
||||
sdw = startDayOfWeek;
|
||||
st = startTime;
|
||||
sdm = -1;
|
||||
|
||||
em = endMonth;
|
||||
edwm = endDay;
|
||||
edw = endDayOfWeek;
|
||||
et = endTime;
|
||||
edm = -1;
|
||||
STZInfo xinfo = getSTZInfo();
|
||||
xinfo.setStart(startMonth, startDay, startDayOfWeek, startTime, -1, false);
|
||||
xinfo.setEnd(endMonth, endDay, endDayOfWeek, endTime, -1, false);
|
||||
}
|
||||
|
||||
public void setRawOffset(int offsetMillis) {
|
||||
|
@ -169,7 +155,7 @@ public class SimpleTimeZone extends JDKTimeZone {
|
|||
public void setStartYear(int year) {
|
||||
unwrapSTZ().setStartYear(year);
|
||||
|
||||
sy = year;
|
||||
getSTZInfo().sy = year;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -197,11 +183,7 @@ public class SimpleTimeZone extends JDKTimeZone {
|
|||
int time) {
|
||||
unwrapSTZ().setStartRule(month, dayOfWeekInMonth, dayOfWeek, time);
|
||||
|
||||
sm = month;
|
||||
sdwm = dayOfWeekInMonth;
|
||||
sdw = dayOfWeek;
|
||||
st = time;
|
||||
sdm = -1;
|
||||
getSTZInfo().setStart(month, dayOfWeekInMonth, dayOfWeek, time, -1, false);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -219,11 +201,7 @@ public class SimpleTimeZone extends JDKTimeZone {
|
|||
public void setStartRule(int month, int dayOfMonth, int time) {
|
||||
unwrapSTZ().setStartRule(month, dayOfMonth, time);
|
||||
|
||||
sm = month;
|
||||
sdwm = -1;
|
||||
sdw = -1;
|
||||
st = time;
|
||||
sdm = dayOfMonth;
|
||||
getSTZInfo().setStart(month, -1, -1, time, dayOfMonth, false);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -246,12 +224,7 @@ public class SimpleTimeZone extends JDKTimeZone {
|
|||
public void setStartRule(int month, int dayOfMonth, int dayOfWeek, int time, boolean after) {
|
||||
unwrapSTZ().setStartRule(month, dayOfMonth, dayOfWeek, time, after);
|
||||
|
||||
sm = month;
|
||||
sdwm = -1;
|
||||
sdw = dayOfWeek;
|
||||
st = time;
|
||||
sdm = dayOfMonth;
|
||||
sa = after;
|
||||
getSTZInfo().setStart(month, -1, dayOfWeek, time, dayOfMonth, after);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -278,11 +251,7 @@ public class SimpleTimeZone extends JDKTimeZone {
|
|||
int time) {
|
||||
unwrapSTZ().setEndRule(month, dayOfWeekInMonth, dayOfWeek, time);
|
||||
|
||||
em = month;
|
||||
edwm = dayOfWeekInMonth;
|
||||
edw = dayOfWeek;
|
||||
et = time;
|
||||
edm = -1;
|
||||
getSTZInfo().setEnd(month, dayOfWeekInMonth, dayOfWeek, time, -1, false);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -300,11 +269,7 @@ public class SimpleTimeZone extends JDKTimeZone {
|
|||
public void setEndRule(int month, int dayOfMonth, int time) {
|
||||
unwrapSTZ().setEndRule(month, dayOfMonth, time);
|
||||
|
||||
em = month;
|
||||
edwm = -1;
|
||||
edw = -1;
|
||||
et = time;
|
||||
edm = dayOfMonth;
|
||||
getSTZInfo().setEnd(month, -1, -1, time, dayOfMonth, false);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -327,12 +292,7 @@ public class SimpleTimeZone extends JDKTimeZone {
|
|||
public void setEndRule(int month, int dayOfMonth, int dayOfWeek, int time, boolean after) {
|
||||
unwrapSTZ().setEndRule(month, dayOfMonth, dayOfWeek, time, after);
|
||||
|
||||
em = month;
|
||||
edwm = -1;
|
||||
edw = dayOfWeek;
|
||||
et = time;
|
||||
edm = dayOfMonth;
|
||||
ea = after;
|
||||
getSTZInfo().setEnd(month, -1, dayOfWeek, time, dayOfMonth, after);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -344,7 +304,7 @@ public class SimpleTimeZone extends JDKTimeZone {
|
|||
*/
|
||||
public void setDSTSavings(int millisSavedDuringDST) {
|
||||
unwrapSTZ().setDSTSavings(millisSavedDuringDST);
|
||||
dst = millisSavedDuringDST;
|
||||
dst = millisSavedDuringDST;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -394,38 +354,23 @@ public class SimpleTimeZone extends JDKTimeZone {
|
|||
// behavior should be no dst
|
||||
}
|
||||
|
||||
if (sy != -1) {
|
||||
stz.setStartYear(sy);
|
||||
}
|
||||
if (sm != -1) {
|
||||
if (sdm == -1) {
|
||||
stz.setStartRule(sm, sdwm, sdw, st);
|
||||
} else if (sdw == -1) {
|
||||
stz.setStartRule(sm, sdm, st);
|
||||
} else {
|
||||
stz.setStartRule(sm, sdm, sdw, st, sa);
|
||||
}
|
||||
}
|
||||
if (em != -1) {
|
||||
if (edm == -1) {
|
||||
stz.setEndRule(em, edwm, edw, et);
|
||||
} else if (edw == -1) {
|
||||
stz.setEndRule(em, edm, et);
|
||||
} else {
|
||||
stz.setEndRule(em, edm, edw, et, ea);
|
||||
}
|
||||
if (xinfo != null) {
|
||||
xinfo.applyTo(stz);
|
||||
}
|
||||
zone = stz;
|
||||
}
|
||||
}
|
||||
|
||||
private STZInfo getSTZInfo() {
|
||||
if (xinfo == null) {
|
||||
xinfo = new STZInfo();
|
||||
}
|
||||
return xinfo;
|
||||
}
|
||||
|
||||
// data needed for streaming mutated SimpleTimeZones in JDK14
|
||||
int raw, dst = 3600000;
|
||||
int sy = -1;
|
||||
int sm = -1, sdwm, sdw, st, sdm;
|
||||
boolean sa;
|
||||
int em = -1, edwm, edw, et, edm;
|
||||
boolean ea;
|
||||
private int raw, dst = 3600000;
|
||||
private STZInfo xinfo = null;
|
||||
}
|
||||
|
||||
//eof
|
||||
|
|
Loading…
Add table
Reference in a new issue