5

我正在尝试实施Joda-Time来倒计时圣诞节,但到目前为止我很震惊。我尝试了 java.util.Date 并且大多数 StackOverflow 问题和答案都建议使用 Joda-Time。但我无法让它工作。有些代码给出了不同的答案。

这是我尝试过的一些代码,

DateTime now = new DateTime();
DateTime christmas = new DateTime(2012, 12, 25, 8, 0, 0, 0);
Days daysToChristmas = Days.daysBetween(today, christmas); 
System.out.println(daysToChristmas.toString());

这将打印P187D作为答案。

DateTime start = new DateTime(DateTime.now());
DateTime end = new DateTime(2012, 12, 25, 0, 0, 0 ,0);
Interval interval = new Interval(start, end);
Period period = interval.toPeriod();
System.out.println("Seconds " + period.getSeconds());
System.out.println("Minutes " + period.getMinutes());
System.out.println("Hours " + period.getHours());
System.out.println("Days " + period.getDays());

这将打印以下结果,

Seconds 36
Minutes 21
Hours 7
Days 4

我哪里出错了?

4

3 回答 3

13

您应该使用 aPeriod来确定所涉及的月数/天数/等:

Period period = new Period(start, end);

将 an 转换Interval为句点也可以,但是无参数重载包括所有句点单位 - 而且您没有打印出月份。

现在,如果您想要天、小时、分钟、秒,那么您需要创建一个适当的PeriodType,例如

PeriodType periodType = PeriodType.dayTime().withMillisRemoved();
Period period = new Period(start, end, periodType);

然后你可以要求那些单独的领域,一切都应该很好。

(您实际上可以使用 just dayTime(),因为millis 不会干扰其他任何事情。)

因此,您可以像上面那样直接从startand构建您的期间end,或者如果您想保留Interval,您可以使用:

Period period = interval.toPeriod(periodType);
于 2012-06-20T11:22:14.523 回答
2

第一个代码以ISO 8601格式打印P187D 。

第二个代码仅打印 4 天,因为您缺少月份 ( period.getMonths())。

于 2012-06-20T11:19:43.577 回答
2

您可以使用此代码。

DateTime dt1 = new DateTime();
DateTime dt2 = new DateTime(2012, 12, 25, 0, 0, 0, 0);
int seconds=Seconds.secondsBetween(dt1, dt2).getSeconds();

int noOfDays=seconds/(24*60*60);
int noOfHours=(seconds%(24*60*60))/(60*60);
int noOfMinutes=((seconds%(24*60*60))%(60*60))/60;
int noSec=((seconds%(24*60*60))%(60*60))%60;

System.out.println("Time Left For christmas");
System.out.println("Days Left="+noOfDays+" Hours="+noOfHours+" Minutes="+noOfMinutes+" Seconds="+noSec);
于 2012-06-20T11:42:45.433 回答