使用Joda Time获得圣诞节的时间

时间:2012-06-20 21:27:40

标签: java datetime date jodatime duration

我需要以毫秒为单位计算到圣诞节的时间。我正在使用joda时间,我尝试使用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,但我找不到答案。

2 个答案:

答案 0 :(得分:4)

要计算毫秒数,这很容易 - 根本不需要通过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());
    }
}

答案 1 :(得分:1)

长度为32位的

int可以将值存储在-21474836482147483647之间的任何位置,如果它在默认情况下签名,unsigned在0和{{1}之间},一旦这样的值超过它,就会发生溢出,并且值会被包裹,例如4294967295,如果你试图设置一个更大的值,类型2147483647 + 1 == -2147483648是64位这样它long保持较大的值,在这种情况下可能会发生一个int,同样的事情发生,这就是为什么你可能得到错误的值。

can返回DateTimeUtils.getDurationMillis