首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java 8/ jsr310中格式化持续时间

在Java 8/ jsr310中格式化持续时间
EN

Stack Overflow用户
提问于 2013-12-29 15:59:13
回答 5查看 36.3K关注 0票数 42

我正在将一个项目从Joda-Time转换为java8 8的本机时间库,我遇到了一个麻烦。

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

通过转换为句点并使用PeriodFormatter来使用Joda-Time很容易做到这一点,但是我无法在Java8中找到这类类。我是不是遗漏了什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-12-29 16:07:26

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

可能会发生这样的情况: Java 9将引入某种内置的周期格式(请参阅S.Coleborne中有关这方面的内容)。

结论: JSR-310与JodaTime不完全兼容,需要做大量的工作。我不会那么热衷于移民。您是否需要JodaTime不提供的JSR-310的特殊功能?

附加注意:您还应该意识到,joda期间(包括从年份到秒的所有单位)与and 310期间(仅几年、几个月、几天)或and 310持续时间(仅为小时、分钟、秒和分数秒)并不完全兼容。

票数 25
EN

Stack Overflow用户

发布于 2016-04-02 21:41:12

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

在Java9中,Duration方法用于返回天、小时、分钟、秒、毫秒/纳秒的各个部分。看这个预发布的OpenJDK源代码

给定49H30M20.123S…的持续时间

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

记住,这里的“天”指的是24小时,忽略日历上的日期。如果您关心日期,请使用Period类代替。

我不知道是否增加了任何额外的格式化功能。但是,至少您将能够更方便地从这些新的getter方法获得的数字生成您自己的字符串。

Java 8

奇怪的是,Java8中的java.time第一版没有包含用于这些值的方便的getter方法。这是java.time框架的优秀设计中少有的疏忽之一。

参见相关问题:为什么我不能在java.time中有几分钟或几个小时的时间?

票数 42
EN

Stack Overflow用户

发布于 2013-12-29 17:49:29

没有内置方法,但是您可以访问小时/分钟数,而不必手动计算它们。您的特定格式可能如下:

代码语言:javascript
复制
Duration d = Duration.of(75, HOURS).plusMinutes(15);
long hours = d.toHours(); //75
long minutes = d.minusHours(hours).toMinutes(); //15
String HH_PLUS_MM = hours + "+" + minutes; //75+15
System.out.println(HH_PLUS_MM);

如果保证持续时间少于24小时,也可以使用以下技巧:

代码语言:javascript
复制
String hhPlusMm = LocalTime.MIDNIGHT.plus(d).format(DateTimeFormatter.ofPattern("HH+mm"));
票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20827047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档