(
long elapsedTime,
int nanosecond,
TimeScale scale
)
| 533 | //~ Konstruktoren ----------------------------------------------------- |
| 534 | |
| 535 | private Moment( |
| 536 | long elapsedTime, |
| 537 | int nanosecond, |
| 538 | TimeScale scale |
| 539 | ) { |
| 540 | super(); |
| 541 | |
| 542 | if (scale == POSIX) { |
| 543 | this.posixTime = elapsedTime; |
| 544 | this.fraction = nanosecond; |
| 545 | } else { |
| 546 | LeapSeconds ls = LeapSeconds.getInstance(); |
| 547 | |
| 548 | if (ls.isEnabled()) { |
| 549 | long utcTime; |
| 550 | |
| 551 | if (scale == UTC) { |
| 552 | utcTime = elapsedTime; |
| 553 | } else if (scale == TAI) { |
| 554 | if (elapsedTime < 0) { |
| 555 | throw new IllegalArgumentException( |
| 556 | "TAI not supported before 1958-01-01: " + elapsedTime); |
| 557 | } else if (elapsedTime < UTC_TAI_DELTA) { |
| 558 | long tv = Math.addExact(elapsedTime, 32 - UTC_TAI_DELTA); |
| 559 | nanosecond = Math.addExact(nanosecond, 184_000_000); |
| 560 | if (nanosecond >= MRD) { |
| 561 | tv = Math.incrementExact(tv); |
| 562 | nanosecond = Math.subtractExact(nanosecond, MRD); |
| 563 | } |
| 564 | double tt = tv + (nanosecond / (MRD * 1.0)); |
| 565 | PlainDate date = // approximation |
| 566 | PlainDate.of(Math.floorDiv((long) (tt - 42.184), 86400), EpochDays.UTC); |
| 567 | double utValue = tt - TimeScale.deltaT(date); |
| 568 | utcTime = (long) Math.floor(utValue); |
| 569 | nanosecond = toNanos(utValue, utcTime); |
| 570 | } else { |
| 571 | utcTime = Math.subtractExact(elapsedTime, UTC_TAI_DELTA + 10); |
| 572 | } |
| 573 | } else if (scale == GPS) { |
| 574 | utcTime = Math.addExact(elapsedTime, UTC_GPS_DELTA); |
| 575 | if (utcTime < UTC_GPS_DELTA) { |
| 576 | throw new IllegalArgumentException( |
| 577 | "GPS not supported before 1980-01-06: " + elapsedTime); |
| 578 | } |
| 579 | } else if (scale == TT) { |
| 580 | if ((elapsedTime < 42L) || ((elapsedTime == 42L) && (nanosecond < 184_000_000))) { |
| 581 | double tt = ((double) elapsedTime) + (nanosecond / (MRD * 1.0)); |
| 582 | PlainDate date = // approximation |
| 583 | PlainDate.of(Math.floorDiv((long) (tt - 42.184), 86400), EpochDays.UTC); |
| 584 | double utValue = tt - TimeScale.deltaT(date); |
| 585 | utcTime = (long) Math.floor(utValue); |
| 586 | nanosecond = toNanos(utValue, utcTime); |
| 587 | } else { |
| 588 | elapsedTime = Math.subtractExact(elapsedTime, 42); |
| 589 | nanosecond = Math.subtractExact(nanosecond, 184_000_000); |
| 590 | if (nanosecond < 0) { |
| 591 | elapsedTime = Math.decrementExact(elapsedTime); |
| 592 | nanosecond = Math.addExact(nanosecond, MRD); |
nothing calls this directly
no test coverage detected