rt/emul/compact/src/main/java/java/util/Date.java
changeset 1340 41046f76a76a
parent 1334 588d5bf7a560
     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  }