我需要以毫秒为单位计算到圣诞节的时间。我正在使用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,但我找不到答案。
答案 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)
int
可以将值存储在-2147483648
和2147483647
之间的任何位置,如果它在默认情况下签名,unsigned
在0和{{1}之间},一旦这样的值超过它,就会发生溢出,并且值会被包裹,例如4294967295
,如果你试图设置一个更大的值,类型2147483647 + 1 == -2147483648
是64位这样它long
保持较大的值,在这种情况下可能会发生一个int,同样的事情发生,这就是为什么你可能得到错误的值。
can
返回DateTimeUtils.getDurationMillis