0

クリスマスまでの時間をミリ秒単位で計算する必要があります。私はjodatimeを使用していてPeriod、を使用してみましたが、Googleで多くの時間を無駄にした後、これが間違っていることに気付き、ミリ秒を計算できました。ただし、私の実装は正しくなく、間違った結果が得られます。

私のコード:

DateTime start = new DateTime(DateTime.now());
DateTime end = new DateTime(2012, 12, 25, 0, 0, 0 ,0);
org.joda.time.Duration duration = new Period(end, start).toDurationFrom(new Instant());
int millis = (int) DateTimeUtils.getDurationMillis(duration);
Log.d("Millis", String.valueOf(millis));

Joda Time Documentationを見てみましたが、答えが見つかりませんでした。

4

2 に答える 2

4

ミリ秒を計算するだけなら簡単です。a を経由する必要はまったくありませんPeriod

long milliseconds = end.getMillis() - start.getMillis();

(ちなみに、なぜ電話をかけているのかは明確ではありませんnew DateTime(DateTime.now())-それだけでDateTime.now()十分です。)

編集:それは私にとってはうまくいきます:

import org.joda.time.*;

public class Test {
    public static void main(String[] args) {
        DateTime start = DateTime.now();
        DateTime end = new DateTime(2012, 12, 25, 0, 0, 0, 0);
        System.out.println(end.getMillis() - start.getMillis());
    }
}
于 2012-06-20T21:30:25.837 に答える
1

int32ビットの長さは、デフォルトで署名されている場合は0との間-2147483648のどこにでも値を格納できます。そのような値がそれを超えると、オーバーフローが発生し、値がラップされます。より大きな値を設定しようとしました。タイプは 64 ビットなので、より大きな値を保持します。この場合、おそらく int になります。同じことが発生するため、間違った値が得られる可能性があります。2147483647unsigned42949672952147483647 + 1 == -2147483648longcan

DateTimeUtils.getDurationMillisを返しますlong

于 2012-06-20T22:12:17.853 に答える