我正在将一个项目从Joda-Time转换为java8 8的本机时间库,我遇到了一个麻烦。
我一直找不到格式化程序。我希望有一个自定义字符串格式,例如,HHH+MM,其中持续75小时15分钟的格式为"75+15"格式。
通过转换为句点并使用PeriodFormatter来使用Joda-Time很容易做到这一点,但是我无法在Java8中找到这类类。我是不是遗漏了什么?
发布于 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持续时间(仅为小时、分钟、秒和分数秒)并不完全兼容。
发布于 2016-04-02 21:41:12
Java9及更高版本:Duration::to…Part方法
在Java9中,Duration类方法用于返回天、小时、分钟、秒、毫秒/纳秒的各个部分。看这个预发布的OpenJDK源代码。
给定49H30M20.123S…的持续时间
toNanosPart() = 123000000toMillisPart() = 123toSecondsPart() = 20toMinutesPart() = 30toHoursPart() =1toDaysPart() =2记住,这里的“天”指的是24小时,忽略日历上的日期。如果您关心日期,请使用Period类代替。
我不知道是否增加了任何额外的格式化功能。但是,至少您将能够更方便地从这些新的getter方法获得的数字生成您自己的字符串。
Java 8
奇怪的是,Java8中的java.time第一版没有包含用于这些值的方便的getter方法。这是java.time框架的优秀设计中少有的疏忽之一。
参见相关问题:为什么我不能在java.time中有几分钟或几个小时的时间?。
发布于 2013-12-29 17:49:29
没有内置方法,但是您可以访问小时/分钟数,而不必手动计算它们。您的特定格式可能如下:
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小时,也可以使用以下技巧:
String hhPlusMm = LocalTime.MIDNIGHT.plus(d).format(DateTimeFormatter.ofPattern("HH+mm"));https://stackoverflow.com/questions/20827047
复制相似问题