java.time.zone.ZoneOffsetTransitionRule#getDayOfMonthIndicator ( )源码实例Demo

下面列出了java.time.zone.ZoneOffsetTransitionRule#getDayOfMonthIndicator ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: openjdk-jdk9   文件: ZoneRules.java
/**
 * Writes the state of the transition rule to the stream.
 *
 * @param rule  the transition rule, not null
 * @param out  the output stream, not null
 * @throws IOException if an error occurs
 */
static void writeRule(ZoneOffsetTransitionRule rule, DataOutput out) throws IOException {
    int month = rule.getMonth().getValue();
    byte dom = (byte)rule.getDayOfMonthIndicator();
    int dow = (rule.getDayOfWeek() == null ? -1 : rule.getDayOfWeek().getValue());
    LocalTime time = rule.getLocalTime();
    boolean timeEndOfDay = rule.isMidnightEndOfDay();
    TimeDefinition timeDefinition = rule.getTimeDefinition();
    ZoneOffset standardOffset = rule.getStandardOffset();
    ZoneOffset offsetBefore = rule.getOffsetBefore();
    ZoneOffset offsetAfter = rule.getOffsetAfter();

    int timeSecs = (timeEndOfDay ? 86400 : time.toSecondOfDay());
    int stdOffset = standardOffset.getTotalSeconds();
    int beforeDiff = offsetBefore.getTotalSeconds() - stdOffset;
    int afterDiff = offsetAfter.getTotalSeconds() - stdOffset;
    int timeByte = (timeSecs % 3600 == 0 ? (timeEndOfDay ? 24 : time.getHour()) : 31);
    int stdOffsetByte = (stdOffset % 900 == 0 ? stdOffset / 900 + 128 : 255);
    int beforeByte = (beforeDiff == 0 || beforeDiff == 1800 || beforeDiff == 3600 ? beforeDiff / 1800 : 3);
    int afterByte = (afterDiff == 0 || afterDiff == 1800 || afterDiff == 3600 ? afterDiff / 1800 : 3);
    int dowByte = (dow == -1 ? 0 : dow);
    int b = (month << 28) +                     // 4 bytes
            ((dom + 32) << 22) +                // 6 bytes
            (dowByte << 19) +                   // 3 bytes
            (timeByte << 14) +                  // 5 bytes
            (timeDefinition.ordinal() << 12) +  // 2 bytes
            (stdOffsetByte << 4) +              // 8 bytes
            (beforeByte << 2) +                 // 2 bytes
            afterByte;                          // 2 bytes
    out.writeInt(b);
    if (timeByte == 31) {
        out.writeInt(timeSecs);
    }
    if (stdOffsetByte == 255) {
        out.writeInt(stdOffset);
    }
    if (beforeByte == 3) {
        out.writeInt(offsetBefore.getTotalSeconds());
    }
    if (afterByte == 3) {
        out.writeInt(offsetAfter.getTotalSeconds());
    }
}
 
源代码2 项目: questdb   文件: TimeZoneRulesImpl.java
public TimeZoneRulesImpl(ZoneRules rules) {
    final long[] savingsInstantTransition = (long[]) Unsafe.getUnsafe().getObject(rules, SAVING_INSTANT_TRANSITION);

    if (savingsInstantTransition.length == 0) {
        ZoneOffset[] standardOffsets = (ZoneOffset[]) Unsafe.getUnsafe().getObject(rules, STANDARD_OFFSETS);
        standardOffset = standardOffsets[0].getTotalSeconds() * 1000;
    } else {
        standardOffset = Long.MIN_VALUE;
    }

    LocalDateTime[] savingsLocalTransitions = (LocalDateTime[]) Unsafe.getUnsafe().getObject(rules, SAVINGS_LOCAL_TRANSITION);
    for (int i = 0, n = savingsLocalTransitions.length; i < n; i++) {
        LocalDateTime dt = savingsLocalTransitions[i];

        historicTransitions.add(Dates.toMillis(dt.getYear(), dt.getMonthValue(), dt.getDayOfMonth(), dt.getHour(), dt.getMinute()) +
                dt.getSecond() * 1000 + dt.getNano() / 1000000);
    }
    cutoffTransition = historicTransitions.getLast();
    historyOverlapCheckCutoff = historicTransitions.size() - 1;


    ZoneOffsetTransitionRule[] lastRules = (ZoneOffsetTransitionRule[]) Unsafe.getUnsafe().getObject(rules, LAST_RULES);
    this.rules = new ObjList<>(lastRules.length);
    for (int i = 0, n = lastRules.length; i < n; i++) {
        ZoneOffsetTransitionRule zr = lastRules[i];
        TransitionRule tr = new TransitionRule();
        tr.offsetBefore = zr.getOffsetBefore().getTotalSeconds();
        tr.offsetAfter = zr.getOffsetAfter().getTotalSeconds();
        tr.standardOffset = zr.getStandardOffset().getTotalSeconds();
        tr.dow = zr.getDayOfWeek() == null ? -1 : zr.getDayOfWeek().getValue();
        tr.dom = zr.getDayOfMonthIndicator();
        tr.month = zr.getMonth().getValue();
        tr.midnightEOD = zr.isMidnightEndOfDay();
        tr.hour = zr.getLocalTime().getHour();
        tr.minute = zr.getLocalTime().getMinute();
        tr.second = zr.getLocalTime().getSecond();
        switch (zr.getTimeDefinition()) {
            case UTC:
                tr.timeDef = TransitionRule.UTC;
                break;
            case STANDARD:
                tr.timeDef = TransitionRule.STANDARD;
                break;
            default:
                tr.timeDef = TransitionRule.WALL;
                break;
        }
        this.rules.add(tr);
    }

    this.ruleCount = lastRules.length;

    ZoneOffset[] wallOffsets = (ZoneOffset[]) Unsafe.getUnsafe().getObject(rules, WALL_OFFSETS);
    this.wallOffsets = new int[wallOffsets.length];
    for (int i = 0, n = wallOffsets.length; i < n; i++) {
        this.wallOffsets[i] = wallOffsets[i].getTotalSeconds();
    }
    this.firstWall = this.wallOffsets[0] * Dates.SECOND_MILLIS;
    this.lastWall = this.wallOffsets[wallOffsets.length - 1] * Dates.SECOND_MILLIS;
}
 
源代码3 项目: questdb   文件: TimeZoneRulesImpl.java
public TimeZoneRulesImpl(ZoneRules rules) {
    final long[] savingsInstantTransition = (long[]) Unsafe.getUnsafe().getObject(rules, SAVING_INSTANT_TRANSITION);

    if (savingsInstantTransition.length == 0) {
        ZoneOffset[] standardOffsets = (ZoneOffset[]) Unsafe.getUnsafe().getObject(rules, STANDARD_OFFSETS);
        standardOffset = standardOffsets[0].getTotalSeconds() * Timestamps.SECOND_MICROS;
    } else {
        standardOffset = Long.MIN_VALUE;
    }

    LocalDateTime[] savingsLocalTransitions = (LocalDateTime[]) Unsafe.getUnsafe().getObject(rules, SAVINGS_LOCAL_TRANSITION);
    for (int i = 0, n = savingsLocalTransitions.length; i < n; i++) {
        LocalDateTime dt = savingsLocalTransitions[i];

        historicTransitions.add(Timestamps.toMicros(dt.getYear(), dt.getMonthValue(), dt.getDayOfMonth(), dt.getHour(), dt.getMinute()) +
                dt.getSecond() * Timestamps.SECOND_MICROS + dt.getNano() / 1000);
    }
    cutoffTransition = historicTransitions.getLast();
    historyOverlapCheckCutoff = historicTransitions.size() - 1;


    ZoneOffsetTransitionRule[] lastRules = (ZoneOffsetTransitionRule[]) Unsafe.getUnsafe().getObject(rules, LAST_RULES);
    this.rules = new ObjList<>(lastRules.length);
    for (int i = 0, n = lastRules.length; i < n; i++) {
        ZoneOffsetTransitionRule zr = lastRules[i];
        TransitionRule tr = new TransitionRule();
        tr.offsetBefore = zr.getOffsetBefore().getTotalSeconds();
        tr.offsetAfter = zr.getOffsetAfter().getTotalSeconds();
        tr.standardOffset = zr.getStandardOffset().getTotalSeconds();
        tr.dow = zr.getDayOfWeek() == null ? -1 : zr.getDayOfWeek().getValue();
        tr.dom = zr.getDayOfMonthIndicator();
        tr.month = zr.getMonth().getValue();
        tr.midnightEOD = zr.isMidnightEndOfDay();
        tr.hour = zr.getLocalTime().getHour();
        tr.minute = zr.getLocalTime().getMinute();
        tr.second = zr.getLocalTime().getSecond();
        switch (zr.getTimeDefinition()) {
            case UTC:
                tr.timeDef = TransitionRule.UTC;
                break;
            case STANDARD:
                tr.timeDef = TransitionRule.STANDARD;
                break;
            default:
                tr.timeDef = TransitionRule.WALL;
                break;
        }
        this.rules.add(tr);
    }

    this.ruleCount = lastRules.length;

    ZoneOffset[] wallOffsets = (ZoneOffset[]) Unsafe.getUnsafe().getObject(rules, WALL_OFFSETS);
    this.wallOffsets = new int[wallOffsets.length];
    for (int i = 0, n = wallOffsets.length; i < n; i++) {
        this.wallOffsets[i] = wallOffsets[i].getTotalSeconds();
    }
    this.firstWall = this.wallOffsets[0] * Timestamps.SECOND_MICROS;
    this.lastWall = this.wallOffsets[wallOffsets.length - 1] * Timestamps.SECOND_MICROS;
}