5

私はクリスマスまでカウントダウンするためにJoda-Timeを実装しようとしていますが、これまでのところ私は打たれています。java.util.Dateと、Joda-Timeの使用を提案するStackOverflowのほとんどの質問と回答を試しました。しかし、私はそれを機能させることができません。いくつかのコードは異なる答えを与えます。

これが私が試したいくつかのコードです、

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

Period関係する月/日などの数を決定するには、を使用する必要があります。

Period period = new Period(start, end);

を期間に変換するIntervalことも問題ありませんでしたが、パラメーターなしの過負荷にはすべての期間単位が含まれ、月を印刷していませんでした。

ここで、日、時間、分、秒のみが必要な場合は、適切なものを作成する必要がありますPeriodType

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

次に、それらの個々のフィールドを要求できます。すべてがうまくいくはずです。

dayTime()ミリ秒が他の何にも干渉しないことを考えると、実際には、を使用することができます。)

startしたがって、上記のようにから直接期間を作成するか、endを保持したい場合はInterval、次を使用できます。

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

最初のコードは、 ISO8601形式でP187Dを出力します。

2番目のコードは、月が欠落しているため(period.getMonths())、4日しか出力されません。

于 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 に答える