2017-03-16 54 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;