我有以下时间1个月5d 22h 35m 39s,我想格式化为35d 22h 35m 39s。但是,在使用以下格式化程序时,月份将被删除,并且尚未添加到日期中:
PeriodFormatter formatter = new PeriodFormatterBuilder()
.printZeroAlways()
.appendDays().appendSuffix(" d ")
.appendHours().appendSuffix(" h ")
.appendMinutes().appendSuffix(" m ")
.appendSeconds().appendSuffix(" s ")
.toFormatter();
经过一些搜索,我发现一个人应该在Period上使用normalizedStandard()方法,但是当它与period.normalizedStandard(PeriodType.dayTime())
一起使用时,我收到以下错误:
java.lang.UnsupportedOperationException: Field is not supported
at org.joda.time.PeriodType.setIndexedField(PeriodType.java:690)
at org.joda.time.Period.withMonths(Period.java:851)
at org.joda.time.Period.normalizedStandard(Period.java:1541)
at amadeus.bid.wicket.markup.html.CountDownLabel.onComponentTagBody(CountDownLabel.java:34)
有什么想法吗?
答案 0 :(得分:1)
像Elijah Cornell一样悲伤,一般将月数转换为几天是没有意义的,因为月份的长度不同。
然而,可以设想一个应用程序,其中将句点加上特定的开始DateTime
(例如当前时间),从开始到结果计算Duration
并将持续时间转换为{{1 }}:
PeriodType.dayTime()
虽然结果取决于开始,时区,超出夏令时的界限等,但此时无法提供所需的// 1 month 5d 22h 35m 39s
Period period = new Period(0, 1, 0, 5, 22, 35, 39, 0);
Instant start = new Instant();
// current time => 2011-03-17T22:24:01.848+01:00
Duration dura = new Duration(start, start.toDateTime().plus(period));
Period period2 = new Period(dura).normalizedStandard(PeriodType.dayTime());
// => 36d 21h 35m 39s
但 35d 22h 35m 39s
可能这在我看来是有道理的,因为它是36d 21h 35m 39s
的一般用例加上Period
以产生新的DateTime
。
答案 1 :(得分:0)
我认为将一段时间内的一定月份可靠地转换回天数是不可能的,因为一个月内的天数会有所不同。
示例:
//From: 1month 5d 22h 35m 39s
Period period = new Period(0, 1, 0, 5, 22, 35, 39, 0);
//To: 35d 22h 35m 39s.
period.toStandardDays();
引发以下异常:java.lang.UnsupportedOperationException:无法转换为Days,因为此句点包含的月份和月份长度不同