我在使用Joda Time的PeriodFormatter时遇到了麻烦。我想要一个人报告几天、几个小时、几分钟和几秒,但我的尝试似乎是围绕着几个星期。我该怎么做?
import org.joda.time.DateTime;
import org.joda.time.Period;
import org.joda.time.format.PeriodFormatter;
import org.joda.time.format.PeriodFormatterBuilder;
public class Problems {
public static void main(String[] args) {
PeriodFormatter formatter = new PeriodFormatterBuilder()
.printZeroNever()
.appendDays()
.appendSuffix(" day", " days")
.appendSeparator(", ")
.appendHours()
.appendSuffix(" hour", " hours")
.appendSeparator(", ")
.appendMinutes()
.appendSuffix(" minute", " minutes")
.appendSeparator(", ")
.appendSeconds()
.appendSuffix(" second", " seconds")
.toFormatter();
DateTime now = new DateTime();
DateTime justUnderAWeekAgo = now.minusDays(7).plusMinutes(1);
DateTime justOverAWeekAgo = now.minusDays(7).minusMinutes(1);
System.out.println(now);
System.out.println(justUnderAWeekAgo);
System.out.println(justOverAWeekAgo);
// I am happy with the following:
System.out.println(
formatter.print(new Period(justUnderAWeekAgo, now)));
// But not with this (outputs "1 minute" but I want "7 days, 1 minute"):
System.out.println(
formatter.print(new Period(justOverAWeekAgo, now)));
}
}编辑:我想我可以理解为什么这不起作用--即格式化程序只打印期间的各种值,而且由于句点存储一个值长达数周,所以我的问题期间的天数值确实是0。但我还是需要一个很好的方法.
发布于 2010-02-10 11:24:55
在您的例子中的问题是,您没有要求您的PeriodFormatter显示的周。
有两种可能性:
解决方案1:显示周数:
PeriodFormatter formatter = new PeriodFormatterBuilder()
.printZeroNever()
.appendWeeks()
.appendSuffix(" week", " weeks")
.appendSeparator(", ")
.appendDays()
.appendSuffix(" day", " days")
.appendSeparator(", ")
.appendHours()
.appendSuffix(" hour", " hours")
.appendSeparator(", ")
.appendMinutes()
.appendSuffix(" minute", " minutes")
.appendSeparator(", ")
.appendSeconds()
.appendSuffix(" second", " seconds")
.toFormatter();您的示例中的第二个输出将是:
1 week, 1 minute解决方案2:只显示天数,因此您必须使用PeriodType.yearMonthDayTime()
new Period(justUndeAWeekAgo, now, PeriodType.yearMonthDayTime());使用第二种解决方案,您可以保持现在的PeriodFormatter。然后,示例中的第二个输出将是:
7 days, 1 minutehttps://stackoverflow.com/questions/2236213
复制相似问题