0

我需要以毫秒为单位计算圣诞节前的时间。我正在使用 joda time 并尝试使用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

int长度为 32 位的值可以存储介于0-2147483648和试图设置一个更大的值,类型是 64 位,因此它保存更大的值,在这种情况下它可能确实如此,对于一个 int,同样的事情会发生,这就是为什么你可能会得到错误的值。2147483647unsigned42949672952147483647 + 1 == -2147483648longcan

DateTimeUtils.getDurationMillis返回一个long

于 2012-06-20T22:12:17.853 回答