Joda Time怎么计算剩下多少时间?

时间:2015-11-05 17:15:59

标签: java jodatime periodformatter

在我的代码的这一部分中,我希望Joda Time计算并显示到下一个生日还剩多少时间。所以这一年应该在生日那天改变

DateTime startDate = DateTime.now();
DateTime endDate = new DateTime(x,m110,d110,h120,min120);
Period period = new Period(startDate, endDate, PeriodType.dayTime());
textView3.setText(formatter.print(period));
PeriodFormatter formatter = new PeriodFormatterBuilder()
                    .appendMonths().appendSuffix(".")
                    .appendDays().appendSuffix(" ")
                    .appendHours().appendSuffix(":")
                    .appendMinutes().appendSuffix(":")
                    .appendSeconds()
                    .toFormatter();

x这里是年份,m110,d110,h120,min120 - 月,日,小时和分钟。我应该写什么而不是" x",所以它可以计算每年剩下多少时间而不是一次。另一个问题。例如,3小时4分钟,我该怎么办才能显示" 03:04:00"而不是" 3:4:" (它也没有显示0)

1 个答案:

答案 0 :(得分:0)

x的值取决于今年是否已经过生日。您可以在当年的同一天和当月使用DateTime.before方法进行检查:

DateTime startDate = DateTime.now();
int year = startDate.getYear();
DateTime endDate = new DateTime(year,m110,d110,h120,min120);
if (endDate.isBefore(startDate)) // birthday happend already this year?
    endDate = endDate.plusYears(1); // then the next one is in the next year

至于你的第二个问题: 您可以建议builder创建一个始终使用printZeroAlways()打印零的格式化程序。要使格式化程序至少打印两位数,您可以使用minimumPrintedDigits方法:

   PeriodFormatter formatter = new PeriodFormatterBuilder()            
        .minimumPrintedDigits(0)

        .appendMonths().appendSuffix(".")
        .printZeroAlways()
        .appendDays().appendSuffix(" ")

        .minimumPrintedDigits(2)

        .appendHours().appendSuffix(":")
        .appendMinutes().appendSuffix(":")
        .appendSeconds()
        .toFormatter();

请注意,这些方法仅适用于在>方法调用后添加的字段。此外,该值可能会随着构建器的创建而多次更改。