我创建了一个采用两个日期(以毫秒为单位)的方法,并返回一个表示这两个日期之间的持续时间的句子.
目前,我有这个代码:
public static String formatDuration(long start, long end) {
Interval interval = new Interval(start, end);
return getPeriodFormatter().print(interval.toPeriod()).trim();
}
private static PeriodFormatter getPeriodFormatter() {
PeriodFormatter pf = new PeriodFormatterBuilder().printZeroRarelyFirst()
.appendYears().appendSuffix("y ", "y ")
.appendMonths().appendSuffix("m" , "m ")
.appendDays().appendSuffix("d ", "d ")
.appendHours().appendSuffix("h ", "h ")
.appendMinutes().appendSuffix("m ", "m ")
.appendSeconds().appendSuffix("s ", "s ")
.toFormatter();
return pf;
}
Run Code Online (Sandbox Code Playgroud)
但是,我想我误解了我必须在JodaTime中定义间隔的方式.如果我尝试以下测试代码:
@Test
public void foobar() {
try {
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss dd/MM/yyyy");
long start = sdf.parse("10:30:00 24/06/2009").getTime();
long end = sdf.parse("23:05:17 22/08/2009").getTime();
System.out.println("Duration: " + formatDuration(start, end));
} catch (Exception e) {
e.printStackTrace();
fail("Could not test duration.");
}
}
Run Code Online (Sandbox Code Playgroud)
我得到以下输出,这是错误的(特别是在当天部分):
Duration: 1m 1d 12h 35m 17s
Run Code Online (Sandbox Code Playgroud)
如何在JodaTime中定义正确的持续时间?
好吧,事实上,我忘了我的意思PeriodFormatter
是追加周.所以,如果我添加周,我得到以下输出,这是正确的:
Duration: 1m 4w 1d 12h 35m 17s
Run Code Online (Sandbox Code Playgroud)
所以我的问题稍有改变:有没有办法显示月份而不是几周+天的天数?换句话说,而不是:
Duration: 1m 4w 1d 12h 35m 17s
Run Code Online (Sandbox Code Playgroud)
我希望有:
Duration: 1m 29d 12h 35m 17s
Run Code Online (Sandbox Code Playgroud)
试试这个.
Period period = interval.toPeriod( PeriodType.yearMonthDayTime() );
Run Code Online (Sandbox Code Playgroud)
格式化期间之前.
归档时间: |
|
查看次数: |
1770 次 |
最近记录: |