| 605 | * @since 4.0 |
| 606 | */ |
| 607 | public static Duration<IsoUnit> from(TemporalAmount threeten) { |
| 608 | |
| 609 | Duration<IsoUnit> result = Duration.ofZero(); |
| 610 | |
| 611 | for (TemporalUnit tu : threeten.getUnits()) { |
| 612 | long amount = threeten.get(tu); |
| 613 | |
| 614 | if (amount == 0) { |
| 615 | continue; |
| 616 | } |
| 617 | |
| 618 | IsoUnit unit; |
| 619 | |
| 620 | if (tu instanceof java.time.temporal.ChronoUnit) { |
| 621 | switch (java.time.temporal.ChronoUnit.class.cast(tu)) { |
| 622 | case NANOS: |
| 623 | unit = ClockUnit.NANOS; |
| 624 | break; |
| 625 | case MICROS: |
| 626 | unit = ClockUnit.MICROS; |
| 627 | break; |
| 628 | case MILLIS: |
| 629 | unit = ClockUnit.MILLIS; |
| 630 | break; |
| 631 | case SECONDS: |
| 632 | unit = ClockUnit.SECONDS; |
| 633 | break; |
| 634 | case MINUTES: |
| 635 | unit = ClockUnit.MINUTES; |
| 636 | break; |
| 637 | case HOURS: |
| 638 | unit = ClockUnit.HOURS; |
| 639 | break; |
| 640 | case HALF_DAYS: |
| 641 | unit = ClockUnit.HOURS; |
| 642 | amount = Math.multiplyExact(amount, 12); |
| 643 | break; |
| 644 | case DAYS: |
| 645 | unit = CalendarUnit.DAYS; |
| 646 | break; |
| 647 | case WEEKS: |
| 648 | unit = CalendarUnit.WEEKS; |
| 649 | break; |
| 650 | case MONTHS: |
| 651 | unit = CalendarUnit.MONTHS; |
| 652 | break; |
| 653 | case YEARS: |
| 654 | unit = CalendarUnit.YEARS; |
| 655 | break; |
| 656 | case DECADES: |
| 657 | unit = CalendarUnit.DECADES; |
| 658 | break; |
| 659 | case CENTURIES: |
| 660 | unit = CalendarUnit.CENTURIES; |
| 661 | break; |
| 662 | case MILLENNIA: |
| 663 | unit = CalendarUnit.MILLENNIA; |
| 664 | break; |