在 Java 8 / jsr310 中格式化持续时间Java 9 及更高版本:方法Duration::to…Part爪哇 8

2022-09-01 01:52:16

我正在将一个项目从Joda-Time过渡到java8的原生时间库,我遇到了一个障碍。

我一直找不到持续时间的格式化程序。我希望有一个自定义字符串格式,例如,HHH + MM,其中75小时15分钟的持续时间将格式化为“75 + 15”。

通过转换为句点并使用句点Formatter,Joda-Time很容易做到这一点,但是我无法在Java8中找到这种类型的类。我错过了什么吗?


答案 1

Java 9 及更高版本:方法Duration::to…Part

在Java 9中,Duration获得了新的...返回天、小时、分钟、秒、毫秒/纳秒等各个部分的部件方法。请参阅此预发布 OpenJDK 源代码

给定持续时间为49H30M20.123S...

  • toNanosPart()= 123000000
  • toMillisPart()= 123
  • toSecondsPart()= 20
  • toMinutesPart()= 30
  • toHoursPart()= 1
  • toDaysPart()= 2

请记住,这里的“天”表示 24 小时的块,忽略日历上的日期。如果您关心日期,请改用周期类。

我不知道是否添加了任何其他格式化程序功能。但至少您将能够更方便地从通过这些新的getter方法获得的数字中生成自己的字符串。

爪哇 8

奇怪的是,在 Java 8 的 java.time 第一版发行版中,没有包含这些值的方便的 getter 方法。在java.time框架的优秀设计中,很少有疏忽之一。

请参阅相关问题:为什么在 java.time 中,我无法以分钟或小时为单位获得持续时间?


答案 2

jsr-310中没有句点/持续时间格式化程序,与JodaTime不同。并非JodaTime的每个功能都被移植到JSR-310(例如,也不是CymeterType)。反过来,JSR-310具有一些在JodaTime中不可用的功能(例如本地化的工作日数字或带有调节器的策略模式方法)。

Java 9可能会引入某种内置的句点格式(从S. Colebourne那里读到一些关于此的内容)。

结论:JSR-310和JodaTime彼此不完全兼容,因此可能需要做很多工作。我不会那么热衷于尽快移徙。您是否需要JSR-310的特殊功能,而JodaTime没有提供这些功能?

附加说明:您还应该注意,joda 周期(包括从年到秒的所有单位)与 jsr310 周期(仅年、月、日)或 jsr310 持续时间(仅小时、分钟、秒和秒数)不完全兼容。


推荐