2017-03-16 55 views
0

我想在我的应用中使用joda API与Date对象玩。在两秒钟内获得两个乔达日期之间的差异

在一些活动我正在存储joda日期时间在sharedpreference使用以下代码

prefsEdit.putLong(context.getString(R.string.last_status_change_time_key) , DateTime.now().getMillis()); 

现在,在一些其他的活动,即时消息获取该存储的偏好,并使用计算日期之间的差以下代码

long lastStatusChangeTime = objSharedPref.GetAppLongPrefByKey(R.string.last_status_change_time_key); 
DateTime now = DateTime.now(); 
DateTime dateTime = new DateTime(lastStatusChangeTime); 
Seconds seconds = Seconds.secondsBetween(now, dateTime); 
int n = seconds.getSeconds(); 

代码总是返回我的值minus例如-31,-12等。

它没有正确计算差异。

缺什么?

回答

1

secondsBetween()的声明是:

secondsBetween(ReadableInstant start, ReadableInstant end) 

为了有阳性结果的start日期应end日期之前的日期。

这是因为secondsBetween()不返回绝对值。 在您的例子dateTime显然是now之前,所以为了得到正面的价值观调用应该是:

Seconds seconds = Seconds.secondsBetween(dateTime, now); 

代替:

Seconds seconds = Seconds.secondsBetween(now, dateTime); // <- wrong order as `startDate` parameter is a date after `endDate` parameter 

,你的代码可能是:

long lastStatusChangeTime = objSharedPref.GetAppLongPrefByKey(R.string.last_status_change_time_key); 
DateTime now = DateTime.now(); 
DateTime dateTime = new DateTime(lastStatusChangeTime); 
Seconds seconds = Seconds.secondsBetween(dateTime, now); // <-- Here is the difference 
int n = seconds.getSeconds(); 
0

只需使用本机Java代码即可。

long oldTime = Calendar.getInstance().getTime().getTime(); 
Thread.sleep(10*1000); 
long newTime = Calendar.getInstance().getTime().getTime(); 

long diffInMillisecods = newTime - oldTime; 
long diffInSeconds = diffInMillisecods/1000;