MCPcopy Create free account
hub / github.com/MenoData/Time4J / Moment

Method Moment

base/src/main/java/net/time4j/Moment.java:535–633  ·  view source on GitHub ↗
(
        long elapsedTime,
        int nanosecond,
        TimeScale scale
    )

Source from the content-addressed store, hash-verified

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);

Callers

nothing calls this directly

Calls 12

getInstanceMethod · 0.95
isEnabledMethod · 0.95
ofMethod · 0.95
deltaTMethod · 0.95
toNanosMethod · 0.95
stripMethod · 0.95
enhanceMethod · 0.95
checkUnixTimeMethod · 0.95
checkFractionMethod · 0.95
floorDivMethod · 0.80
floorMethod · 0.80
nameMethod · 0.65

Tested by

no test coverage detected