首页 > 解决方案 > ZoneDateTime 的 PeriodFormatter

问题描述

PeriodFormatter 在包 org.joda.time 中。它用于 LocalDateTime。但是需要一个 PeriodFormatter 用于 Zonedatetime。下面是代码

  Period period = new Period(localtime1, localtime2, PeriodType.standard());

    PeriodFormatter dhm = new PeriodFormatterBuilder()
            .printZeroNever()
            .appendYears()
            .appendSuffix(" " + pickUpYear + " ", " " + pickUpYears + " ")
            .appendSeparator(" " + pickUpTimeSeparator + " ")
            .printZeroNever()
            .appendMonths()
            .appendSuffix(" " + pickUpMonth + " ", " " + pickUpMonths + " ")
            .appendSeparator(" " + pickUpTimeSeparator + " ")
            .printZeroNever()
            .appendDays()
            .appendSuffix(" " + pickUpDay + " ", " " + pickUpDays + " ")
            .appendSeparator(" " + pickUpTimeSeparator + " ")
            .printZeroNever()
            .appendHours()
            .appendSuffix(" " + pickUpHour + " ", " " + pickUpHours + " ")
            .appendSeparator(" " + pickUpTimeSeparator + " ")
            .printZeroNever()
            .appendMinutes()
            .appendSuffix(" " + pickUpMinute + " ", " " + pickUpMinutes + " ")
            .toFormatter();

    return dhm.print(period.normalizedStandard());

localtime1 和 localtime2 是 LocalDateTime 对象。但我想使用 ZoneDateTime 来代替。ZoneDateTime 的替代方法是什么?

标签: javajodatimezoneddatetime

解决方案


与 java.time 等效的 Joda-TimeZonedDateTime简称为DateTime. 所以就用它吧。

    DateTimeZone zone = DateTimeZone.forID("Asia/Thimphu");
    DateTime dt1 = new DateTime(2021, 6, 19, 10, 0, zone);
    DateTime dt2 = new DateTime(2022, 6, 21, 14, 0, zone);
    
    Period period = new Period(dt1, dt2, PeriodType.standard());

    PeriodFormatter dhm = new PeriodFormatterBuilder()
            .printZeroNever()
            .appendYears()
            .appendSuffix(" y ", " ys ")
            .appendSeparator(" , ")
            .printZeroNever()
            .appendMonths()
            .appendSuffix(" m ", " ms ")
            .appendSeparator(" , ")
            .printZeroNever()
            .appendDays()
            .appendSuffix(" d ", " ds ")
            .appendSeparator(" ; ")
            .printZeroNever()
            .appendHours()
            .appendSuffix(" h ", " hs ")
            .appendSeparator(" : ")
            .printZeroNever()
            .appendMinutes()
            .appendSuffix(" m ", " ms ")
            .toFormatter();
    
    String result = period.toString(dhm);
    
    System.out.println(result);

输出:

1 年,2 天;4小时


推荐阅读