1.1 --- a/rt/emul/compact/src/main/java/java/util/Date.java Thu Oct 03 15:40:35 2013 +0200
1.2 +++ b/rt/emul/compact/src/main/java/java/util/Date.java Fri Oct 04 12:01:56 2013 +0200
1.3 @@ -29,14 +29,6 @@
1.4 import java.io.IOException;
1.5 import java.io.ObjectOutputStream;
1.6 import java.io.ObjectInputStream;
1.7 -import java.lang.ref.SoftReference;
1.8 -import sun.util.calendar.BaseCalendar;
1.9 -import sun.util.calendar.CalendarDate;
1.10 -import sun.util.calendar.CalendarSystem;
1.11 -import sun.util.calendar.CalendarUtils;
1.12 -import sun.util.calendar.Era;
1.13 -import sun.util.calendar.Gregorian;
1.14 -import sun.util.calendar.ZoneInfo;
1.15
1.16 /**
1.17 * The class <code>Date</code> represents a specific instant
1.18 @@ -129,8 +121,8 @@
1.19 public class Date
1.20 implements java.io.Serializable, Cloneable, Comparable<Date>
1.21 {
1.22 - private static final BaseCalendar gcal =
1.23 - CalendarSystem.getGregorianCalendar();
1.24 + private static final BaseCalendar gcal = new BaseCalendar();
1.25 +
1.26 private static BaseCalendar jcal;
1.27
1.28 private transient long fastTime;
1.29 @@ -141,7 +133,7 @@
1.30 * synch. Otherwise, fastTime is ignored, and cdate indicates the
1.31 * time.
1.32 */
1.33 - private transient BaseCalendar.Date cdate;
1.34 + private transient BaseCalendar.Datum cdate;
1.35
1.36 // Initialized just before the value is used. See parse().
1.37 private static int defaultCenturyStart;
1.38 @@ -245,11 +237,11 @@
1.39 y += month / 12;
1.40 month %= 12;
1.41 } else if (month < 0) {
1.42 - y += CalendarUtils.floorDivide(month, 12);
1.43 - month = CalendarUtils.mod(month, 12);
1.44 + y += month / 12;
1.45 + month = month % 12;
1.46 }
1.47 BaseCalendar cal = getCalendarSystem(y);
1.48 - cdate = (BaseCalendar.Date) cal.newCalendarDate(TimeZone.getDefaultRef());
1.49 + cdate = (BaseCalendar.Datum) cal.newCalendarDate(TimeZone.getDefaultRef());
1.50 cdate.setNormalizedDate(y, month + 1, date).setTimeOfDay(hrs, min, sec, 0);
1.51 getTimeImpl();
1.52 cdate = null;
1.53 @@ -280,7 +272,7 @@
1.54 try {
1.55 d = (Date)super.clone();
1.56 if (cdate != null) {
1.57 - d.cdate = (BaseCalendar.Date) cdate.clone();
1.58 + d.cdate = (BaseCalendar.Datum) cdate.clone();
1.59 }
1.60 } catch (CloneNotSupportedException e) {} // Won't happen
1.61 return d;
1.62 @@ -320,12 +312,12 @@
1.63 y += month / 12;
1.64 month %= 12;
1.65 } else if (month < 0) {
1.66 - y += CalendarUtils.floorDivide(month, 12);
1.67 - month = CalendarUtils.mod(month, 12);
1.68 + y += month / 12;
1.69 + month = month % 12;
1.70 }
1.71 int m = month + 1;
1.72 BaseCalendar cal = getCalendarSystem(y);
1.73 - BaseCalendar.Date udate = (BaseCalendar.Date) cal.newCalendarDate(null);
1.74 + BaseCalendar.Datum udate = (BaseCalendar.Datum) cal.newCalendarDate(null);
1.75 udate.setNormalizedDate(y, m, date).setTimeOfDay(hrs, min, sec, 0);
1.76
1.77 // Use a Date instance to perform normalization. Its fastTime
1.78 @@ -601,12 +593,12 @@
1.79 hour = 0;
1.80 BaseCalendar cal = getCalendarSystem(year);
1.81 if (tzoffset == -1) { // no time zone specified, have to use local
1.82 - BaseCalendar.Date ldate = (BaseCalendar.Date) cal.newCalendarDate(TimeZone.getDefaultRef());
1.83 + BaseCalendar.Datum ldate = (BaseCalendar.Datum) cal.newCalendarDate(TimeZone.getDefaultRef());
1.84 ldate.setDate(year, mon + 1, mday);
1.85 ldate.setTimeOfDay(hour, min, sec, 0);
1.86 return cal.getTime(ldate);
1.87 }
1.88 - BaseCalendar.Date udate = (BaseCalendar.Date) cal.newCalendarDate(null); // no time zone
1.89 + BaseCalendar.Datum udate = (BaseCalendar.Datum) cal.newCalendarDate(null); // no time zone
1.90 udate.setDate(year, mon + 1, mday);
1.91 udate.setTimeOfDay(hour, min, sec, 0);
1.92 return cal.getTime(udate) + tzoffset * (60 * 1000);
1.93 @@ -706,10 +698,10 @@
1.94 y = month / 12;
1.95 month %= 12;
1.96 } else if (month < 0) {
1.97 - y = CalendarUtils.floorDivide(month, 12);
1.98 - month = CalendarUtils.mod(month, 12);
1.99 + y = month / 12;
1.100 + month = month % 12;
1.101 }
1.102 - BaseCalendar.Date d = getCalendarDate();
1.103 + BaseCalendar.Datum d = getCalendarDate();
1.104 if (y != 0) {
1.105 d.setNormalizedYear(d.getNormalizedYear() + y);
1.106 }
1.107 @@ -770,7 +762,7 @@
1.108 */
1.109 @Deprecated
1.110 public int getDay() {
1.111 - return normalize().getDayOfWeek() - gcal.SUNDAY;
1.112 + return normalize().getDayOfWeek() - 7;//gcal.SUNDAY;
1.113 }
1.114
1.115 /**
1.116 @@ -956,7 +948,7 @@
1.117 if (date.cdate == null || date.cdate.isNormalized()) {
1.118 return date.fastTime;
1.119 }
1.120 - BaseCalendar.Date d = (BaseCalendar.Date) date.cdate.clone();
1.121 + BaseCalendar.Datum d = (BaseCalendar.Datum) date.cdate.clone();
1.122 return gcal.getTime(d);
1.123 }
1.124
1.125 @@ -1024,25 +1016,25 @@
1.126 */
1.127 public String toString() {
1.128 // "EEE MMM dd HH:mm:ss zzz yyyy";
1.129 - BaseCalendar.Date date = normalize();
1.130 + BaseCalendar.Datum date = normalize();
1.131 StringBuilder sb = new StringBuilder(28);
1.132 int index = date.getDayOfWeek();
1.133 - if (index == gcal.SUNDAY) {
1.134 + if (index == 7) {
1.135 index = 8;
1.136 }
1.137 convertToAbbr(sb, wtb[index]).append(' '); // EEE
1.138 convertToAbbr(sb, wtb[date.getMonth() - 1 + 2 + 7]).append(' '); // MMM
1.139 - CalendarUtils.sprintf0d(sb, date.getDayOfMonth(), 2).append(' '); // dd
1.140 -
1.141 - CalendarUtils.sprintf0d(sb, date.getHours(), 2).append(':'); // HH
1.142 - CalendarUtils.sprintf0d(sb, date.getMinutes(), 2).append(':'); // mm
1.143 - CalendarUtils.sprintf0d(sb, date.getSeconds(), 2).append(' '); // ss
1.144 - TimeZone zi = date.getZone();
1.145 - if (zi != null) {
1.146 - sb.append(zi.getDisplayName(date.isDaylightTime(), zi.SHORT, Locale.US)); // zzz
1.147 - } else {
1.148 - sb.append("GMT");
1.149 - }
1.150 +// CalendarUtils.sprintf0d(sb, date.getDayOfMonth(), 2).append(' '); // dd
1.151 +//
1.152 +// CalendarUtils.sprintf0d(sb, date.getHours(), 2).append(':'); // HH
1.153 +// CalendarUtils.sprintf0d(sb, date.getMinutes(), 2).append(':'); // mm
1.154 +// CalendarUtils.sprintf0d(sb, date.getSeconds(), 2).append(' '); // ss
1.155 +// TimeZone zi = date.getZone();
1.156 +// if (zi != null) {
1.157 +// sb.append(zi.getDisplayName(date.isDaylightTime(), zi.SHORT, Locale.US)); // zzz
1.158 +// } else {
1.159 +// sb.append("GMT");
1.160 +// }
1.161 sb.append(' ').append(date.getYear()); // yyyy
1.162 return sb.toString();
1.163 }
1.164 @@ -1116,15 +1108,15 @@
1.165 // d MMM yyyy HH:mm:ss 'GMT'
1.166 long t = getTime();
1.167 BaseCalendar cal = getCalendarSystem(t);
1.168 - BaseCalendar.Date date =
1.169 - (BaseCalendar.Date) cal.getCalendarDate(getTime(), (TimeZone)null);
1.170 StringBuilder sb = new StringBuilder(32);
1.171 - CalendarUtils.sprintf0d(sb, date.getDayOfMonth(), 1).append(' '); // d
1.172 - convertToAbbr(sb, wtb[date.getMonth() - 1 + 2 + 7]).append(' '); // MMM
1.173 - sb.append(date.getYear()).append(' '); // yyyy
1.174 - CalendarUtils.sprintf0d(sb, date.getHours(), 2).append(':'); // HH
1.175 - CalendarUtils.sprintf0d(sb, date.getMinutes(), 2).append(':'); // mm
1.176 - CalendarUtils.sprintf0d(sb, date.getSeconds(), 2); // ss
1.177 +// BaseCalendar.Datum date =
1.178 +// (BaseCalendar.Datum) cal.getCalendarDate(getTime(), (TimeZone)null);
1.179 +// CalendarUtils.sprintf0d(sb, date.getDayOfMonth(), 1).append(' '); // d
1.180 +// convertToAbbr(sb, wtb[date.getMonth() - 1 + 2 + 7]).append(' '); // MMM
1.181 +// sb.append(date.getYear()).append(' '); // yyyy
1.182 +// CalendarUtils.sprintf0d(sb, date.getHours(), 2).append(':'); // HH
1.183 +// CalendarUtils.sprintf0d(sb, date.getMinutes(), 2).append(':'); // mm
1.184 +// CalendarUtils.sprintf0d(sb, date.getSeconds(), 2); // ss
1.185 sb.append(" GMT"); // ' GMT'
1.186 return sb.toString();
1.187 }
1.188 @@ -1166,11 +1158,7 @@
1.189 int zoneOffset;
1.190 if (cdate == null) {
1.191 TimeZone tz = TimeZone.getDefaultRef();
1.192 - if (tz instanceof ZoneInfo) {
1.193 - zoneOffset = ((ZoneInfo)tz).getOffsets(fastTime, null);
1.194 - } else {
1.195 - zoneOffset = tz.getOffset(fastTime);
1.196 - }
1.197 + zoneOffset = tz.getOffset(fastTime);
1.198 } else {
1.199 normalize();
1.200 zoneOffset = cdate.getZoneOffset();
1.201 @@ -1178,21 +1166,21 @@
1.202 return -zoneOffset/60000; // convert to minutes
1.203 }
1.204
1.205 - private final BaseCalendar.Date getCalendarDate() {
1.206 + private final BaseCalendar.Datum getCalendarDate() {
1.207 if (cdate == null) {
1.208 - BaseCalendar cal = getCalendarSystem(fastTime);
1.209 - cdate = (BaseCalendar.Date) cal.getCalendarDate(fastTime,
1.210 - TimeZone.getDefaultRef());
1.211 +// BaseCalendar cal = getCalendarSystem(fastTime);
1.212 +// cdate = (BaseCalendar.Datum) cal.getCalendarDate(fastTime,
1.213 +// TimeZone.getDefaultRef());
1.214 }
1.215 return cdate;
1.216 }
1.217
1.218 - private final BaseCalendar.Date normalize() {
1.219 + private final BaseCalendar.Datum normalize() {
1.220 if (cdate == null) {
1.221 - BaseCalendar cal = getCalendarSystem(fastTime);
1.222 - cdate = (BaseCalendar.Date) cal.getCalendarDate(fastTime,
1.223 - TimeZone.getDefaultRef());
1.224 - return cdate;
1.225 +// BaseCalendar cal = getCalendarSystem(fastTime);
1.226 +// cdate = (BaseCalendar.Datum) cal.getCalendarDate(fastTime,
1.227 +// TimeZone.getDefaultRef());
1.228 +// return cdate;
1.229 }
1.230
1.231 // Normalize cdate with the TimeZone in cdate first. This is
1.232 @@ -1205,15 +1193,15 @@
1.233 // fields with the new TimeZone.
1.234 TimeZone tz = TimeZone.getDefaultRef();
1.235 if (tz != cdate.getZone()) {
1.236 - cdate.setZone(tz);
1.237 - CalendarSystem cal = getCalendarSystem(cdate);
1.238 - cal.getCalendarDate(fastTime, cdate);
1.239 +// cdate.setZone(tz);
1.240 +// CalendarSystem cal = getCalendarSystem(cdate);
1.241 +// cal.getCalendarDate(fastTime, cdate);
1.242 }
1.243 return cdate;
1.244 }
1.245
1.246 // fastTime and the returned data are in sync upon return.
1.247 - private final BaseCalendar.Date normalize(BaseCalendar.Date date) {
1.248 + private final BaseCalendar.Datum normalize(BaseCalendar.Datum date) {
1.249 int y = date.getNormalizedYear();
1.250 int m = date.getMonth();
1.251 int d = date.getDayOfMonth();
1.252 @@ -1231,23 +1219,23 @@
1.253 // ss and ms. Also, let GregorianCalendar handle the default
1.254 // cutover year so that we don't need to worry about the
1.255 // transition here.
1.256 - if (y == 1582 || y > 280000000 || y < -280000000) {
1.257 - if (tz == null) {
1.258 - tz = TimeZone.getTimeZone("GMT");
1.259 - }
1.260 - GregorianCalendar gc = new GregorianCalendar(tz);
1.261 - gc.clear();
1.262 - gc.set(gc.MILLISECOND, ms);
1.263 - gc.set(y, m-1, d, hh, mm, ss);
1.264 - fastTime = gc.getTimeInMillis();
1.265 - BaseCalendar cal = getCalendarSystem(fastTime);
1.266 - date = (BaseCalendar.Date) cal.getCalendarDate(fastTime, tz);
1.267 - return date;
1.268 - }
1.269 +// if (y == 1582 || y > 280000000 || y < -280000000) {
1.270 +// if (tz == null) {
1.271 +// tz = TimeZone.getTimeZone("GMT");
1.272 +// }
1.273 +// GregorianCalendar gc = new GregorianCalendar(tz);
1.274 +// gc.clear();
1.275 +// gc.set(gc.MILLISECOND, ms);
1.276 +// gc.set(y, m-1, d, hh, mm, ss);
1.277 +// fastTime = gc.getTimeInMillis();
1.278 +// BaseCalendar cal = getCalendarSystem(fastTime);
1.279 +// date = (BaseCalendar.Datum) cal.getCalendarDate(fastTime, tz);
1.280 +// return date;
1.281 +// }
1.282
1.283 BaseCalendar cal = getCalendarSystem(y);
1.284 if (cal != getCalendarSystem(date)) {
1.285 - date = (BaseCalendar.Date) cal.newCalendarDate(tz);
1.286 + date = (BaseCalendar.Datum) cal.newCalendarDate(tz);
1.287 date.setNormalizedDate(y, m, d).setTimeOfDay(hh, mm, ss, ms);
1.288 }
1.289 // Perform the GregorianCalendar-style normalization.
1.290 @@ -1257,7 +1245,7 @@
1.291 // system, we need to recalculate it using the other one.
1.292 BaseCalendar ncal = getCalendarSystem(fastTime);
1.293 if (ncal != cal) {
1.294 - date = (BaseCalendar.Date) ncal.newCalendarDate(tz);
1.295 + date = (BaseCalendar.Datum) ncal.newCalendarDate(tz);
1.296 date.setNormalizedDate(y, m, d).setTimeOfDay(hh, mm, ss, ms);
1.297 fastTime = ncal.getTime(date);
1.298 }
1.299 @@ -1282,15 +1270,15 @@
1.300 // Quickly check if the time stamp given by `utc' is the Epoch
1.301 // or later. If it's before 1970, we convert the cutover to
1.302 // local time to compare.
1.303 - if (utc >= 0
1.304 - || utc >= GregorianCalendar.DEFAULT_GREGORIAN_CUTOVER
1.305 - - TimeZone.getDefaultRef().getOffset(utc)) {
1.306 +// if (utc >= 0
1.307 +// || utc >= GregorianCalendar.DEFAULT_GREGORIAN_CUTOVER
1.308 +// - TimeZone.getDefaultRef().getOffset(utc)) {
1.309 return gcal;
1.310 - }
1.311 - return getJulianCalendar();
1.312 +// }
1.313 +// return getJulianCalendar();
1.314 }
1.315
1.316 - private static final BaseCalendar getCalendarSystem(BaseCalendar.Date cdate) {
1.317 + private static final BaseCalendar getCalendarSystem(BaseCalendar.Datum cdate) {
1.318 if (jcal == null) {
1.319 return gcal;
1.320 }
1.321 @@ -1302,7 +1290,7 @@
1.322
1.323 synchronized private static final BaseCalendar getJulianCalendar() {
1.324 if (jcal == null) {
1.325 - jcal = (BaseCalendar) CalendarSystem.forName("julian");
1.326 +// jcal = (BaseCalendar) CalendarSystem.forName("julian");
1.327 }
1.328 return jcal;
1.329 }
1.330 @@ -1328,4 +1316,115 @@
1.331 {
1.332 fastTime = s.readLong();
1.333 }
1.334 +
1.335 + static final class BaseCalendar {
1.336 + Datum newCalendarDate(TimeZone t) {
1.337 + return new Datum();
1.338 + }
1.339 +
1.340 + Datum getNthDayOfWeek(int a, int b, Datum c) {
1.341 + return new Datum();
1.342 + }
1.343 +
1.344 + Datum getCalendarDate() {
1.345 + return new Datum();
1.346 + }
1.347 +
1.348 + int getTime(Datum udate) {
1.349 + return 0;
1.350 + }
1.351 +
1.352 + int getMonthLength(Datum cdate) {
1.353 + return 0;
1.354 + }
1.355 +
1.356 + void getCalendarDate(long l, Datum cdate) {
1.357 + }
1.358 +
1.359 + static class Datum implements Cloneable {
1.360 + public Datum clone() {
1.361 + return new Datum();
1.362 + }
1.363 +
1.364 + Datum setNormalizedDate(int y, int i, int date) {
1.365 + return this;
1.366 + }
1.367 +
1.368 + void setTimeOfDay(int hrs, int min, int sec, int i) {
1.369 + }
1.370 +
1.371 + int getYear() {
1.372 + return 0;
1.373 + }
1.374 +
1.375 + void setDate(int year, int i, int mday) {
1.376 + }
1.377 +
1.378 + void setNormalizedYear(int i) {
1.379 + }
1.380 +
1.381 + int getMonth() {
1.382 + return 0;
1.383 + }
1.384 +
1.385 + int getNormalizedYear() {
1.386 + return 0;
1.387 + }
1.388 +
1.389 + void setMonth(int i) {
1.390 + }
1.391 +
1.392 + int getDayOfMonth() {
1.393 + return 0;
1.394 + }
1.395 +
1.396 + void setDayOfMonth(int date) {
1.397 + }
1.398 +
1.399 + int getDayOfWeek() {
1.400 + return 0;
1.401 + }
1.402 +
1.403 + int getHours() {
1.404 + return 0;
1.405 + }
1.406 +
1.407 + void setHours(int hours) {
1.408 + }
1.409 +
1.410 + int getMinutes() {
1.411 + return 0;
1.412 + }
1.413 +
1.414 + void setMinutes(int minutes) {
1.415 + }
1.416 +
1.417 + int getSeconds() {
1.418 + return 0;
1.419 + }
1.420 +
1.421 + void setSeconds(int seconds) {
1.422 + }
1.423 +
1.424 + boolean isNormalized() {
1.425 + return false;
1.426 + }
1.427 +
1.428 + Object getEra() {
1.429 + return this;
1.430 + }
1.431 +
1.432 + int getMillis() {
1.433 + return 0;
1.434 + }
1.435 +
1.436 + TimeZone getZone() {
1.437 + return TimeZone.NO_TIMEZONE;
1.438 + }
1.439 +
1.440 + int getZoneOffset() {
1.441 + return 0;
1.442 + }
1.443 + }
1.444 + }
1.445 }