< prev index next >

src/java.base/share/classes/sun/util/calendar/ZoneInfoFile.java

Print this page




 794             adjust = adjustCycles * 400;
 795             zeroDay += -adjustCycles * DAYS_PER_CYCLE;
 796         }
 797         long yearEst = (400 * zeroDay + 591) / DAYS_PER_CYCLE;
 798         long doyEst = zeroDay - (365 * yearEst + yearEst / 4 - yearEst / 100 + yearEst / 400);
 799         if (doyEst < 0) {
 800             // fix estimate
 801             yearEst--;
 802             doyEst = zeroDay - (365 * yearEst + yearEst / 4 - yearEst / 100 + yearEst / 400);
 803         }
 804         yearEst += adjust;  // reset any negative year
 805         int marchDoy0 = (int) doyEst;
 806         // convert march-based values back to january-based
 807         int marchMonth0 = (marchDoy0 * 5 + 2) / 153;
 808         int month = (marchMonth0 + 2) % 12 + 1;
 809         int dom = marchDoy0 - (marchMonth0 * 306 + 5) / 10 + 1;
 810         yearEst += marchMonth0 / 10;
 811         return (int)yearEst;
 812     }
 813 
 814     private static final int toCalendarDOW[] = new int[] {
 815         -1,
 816         Calendar.MONDAY,
 817         Calendar.TUESDAY,
 818         Calendar.WEDNESDAY,
 819         Calendar.THURSDAY,
 820         Calendar.FRIDAY,
 821         Calendar.SATURDAY,
 822         Calendar.SUNDAY
 823     };
 824 
 825     private static final int toSTZTime[] = new int[] {
 826         SimpleTimeZone.UTC_TIME,
 827         SimpleTimeZone.WALL_TIME,
 828         SimpleTimeZone.STANDARD_TIME,
 829     };
 830 
 831     private static final long OFFSET_MASK = 0x0fL;
 832     private static final long DST_MASK = 0xf0L;
 833     private static final int  DST_NSHIFT = 4;
 834     private static final int  TRANSITION_NSHIFT = 12;
 835     private static final int  LASTYEAR = 2037;
 836 
 837     // from: 0 for offset lookup, 1 for dstsvings lookup
 838     private static int indexOf(int[] offsets, int from, int nOffsets, int offset) {
 839         offset *= 1000;
 840         for (; from < nOffsets; from++) {
 841             if (offsets[from] == offset)
 842                 return from;
 843         }
 844         offsets[from] = offset;
 845         return from;
 846     }
 847 
 848     // return updated nOffsets
 849     private static int addTrans(long transitions[], int nTrans,
 850                                 int offsets[], int nOffsets,
 851                                 long trans, int offset, int stdOffset) {
 852         int offsetIndex = indexOf(offsets, 0, nOffsets, offset);
 853         if (offsetIndex == nOffsets)
 854             nOffsets++;
 855         int dstIndex = 0;
 856         if (offset != stdOffset) {
 857             dstIndex = indexOf(offsets, 1, nOffsets, offset - stdOffset);
 858             if (dstIndex == nOffsets)
 859                 nOffsets++;
 860         }
 861         transitions[nTrans] = ((trans * 1000) << TRANSITION_NSHIFT) |
 862                               ((dstIndex << DST_NSHIFT) & DST_MASK) |
 863                               (offsetIndex & OFFSET_MASK);
 864         return nOffsets;
 865     }
 866 
 867     // ZoneInfo checksum, copy/pasted from javazic
 868     private static class Checksum extends CRC32 {
 869         public void update(int val) {
 870             byte[] b = new byte[4];




 794             adjust = adjustCycles * 400;
 795             zeroDay += -adjustCycles * DAYS_PER_CYCLE;
 796         }
 797         long yearEst = (400 * zeroDay + 591) / DAYS_PER_CYCLE;
 798         long doyEst = zeroDay - (365 * yearEst + yearEst / 4 - yearEst / 100 + yearEst / 400);
 799         if (doyEst < 0) {
 800             // fix estimate
 801             yearEst--;
 802             doyEst = zeroDay - (365 * yearEst + yearEst / 4 - yearEst / 100 + yearEst / 400);
 803         }
 804         yearEst += adjust;  // reset any negative year
 805         int marchDoy0 = (int) doyEst;
 806         // convert march-based values back to january-based
 807         int marchMonth0 = (marchDoy0 * 5 + 2) / 153;
 808         int month = (marchMonth0 + 2) % 12 + 1;
 809         int dom = marchDoy0 - (marchMonth0 * 306 + 5) / 10 + 1;
 810         yearEst += marchMonth0 / 10;
 811         return (int)yearEst;
 812     }
 813 
 814     private static final int[] toCalendarDOW = new int[] {
 815         -1,
 816         Calendar.MONDAY,
 817         Calendar.TUESDAY,
 818         Calendar.WEDNESDAY,
 819         Calendar.THURSDAY,
 820         Calendar.FRIDAY,
 821         Calendar.SATURDAY,
 822         Calendar.SUNDAY
 823     };
 824 
 825     private static final int[] toSTZTime = new int[] {
 826         SimpleTimeZone.UTC_TIME,
 827         SimpleTimeZone.WALL_TIME,
 828         SimpleTimeZone.STANDARD_TIME,
 829     };
 830 
 831     private static final long OFFSET_MASK = 0x0fL;
 832     private static final long DST_MASK = 0xf0L;
 833     private static final int  DST_NSHIFT = 4;
 834     private static final int  TRANSITION_NSHIFT = 12;
 835     private static final int  LASTYEAR = 2037;
 836 
 837     // from: 0 for offset lookup, 1 for dstsvings lookup
 838     private static int indexOf(int[] offsets, int from, int nOffsets, int offset) {
 839         offset *= 1000;
 840         for (; from < nOffsets; from++) {
 841             if (offsets[from] == offset)
 842                 return from;
 843         }
 844         offsets[from] = offset;
 845         return from;
 846     }
 847 
 848     // return updated nOffsets
 849     private static int addTrans(long[] transitions, int nTrans,
 850                                 int[] offsets, int nOffsets,
 851                                 long trans, int offset, int stdOffset) {
 852         int offsetIndex = indexOf(offsets, 0, nOffsets, offset);
 853         if (offsetIndex == nOffsets)
 854             nOffsets++;
 855         int dstIndex = 0;
 856         if (offset != stdOffset) {
 857             dstIndex = indexOf(offsets, 1, nOffsets, offset - stdOffset);
 858             if (dstIndex == nOffsets)
 859                 nOffsets++;
 860         }
 861         transitions[nTrans] = ((trans * 1000) << TRANSITION_NSHIFT) |
 862                               ((dstIndex << DST_NSHIFT) & DST_MASK) |
 863                               (offsetIndex & OFFSET_MASK);
 864         return nOffsets;
 865     }
 866 
 867     // ZoneInfo checksum, copy/pasted from javazic
 868     private static class Checksum extends CRC32 {
 869         public void update(int val) {
 870             byte[] b = new byte[4];


< prev index next >