在我的代码的这一部分中,我希望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)
答案 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();
请注意,这些方法仅适用于在>>方法调用后添加的字段。此外,该值可能会随着构建器的创建而多次更改。