java - 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 的替代方法是什么?
解决方案
与 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小时
推荐阅读
- mockito - AndroidViewModel 和单元测试
- django - Django:为 save.method 提取字典
- spring - 如何测试 Spring @EventListener 方法?
- c++ - C++ std::bind 到 std::function,VS2015 出了什么问题?
- c++ - 将十进制值转换为具有相同可见表示的十六进制值
- normalization - 将数据缩放到 0 到 1 的范围内
- python - 返回numpy数组别名内部数组时如何处理引用计数?
- ruby-on-rails - NoMethodError:使用 Capistrano 部署时,nil:NilClass 的未定义方法“split”
- java - 消除接受不同功能接口的重载方法的歧义
- javascript - 使用 Promise.all 在数组中执行承诺会破坏它们