簡體   English   中英

以秒為單位獲取兩個Joda日期之間的差異

[英]Get difference between two Joda dates in seconds

我正在嘗試在我的應用程序中使用joda API來處理Date對象。

在某些活動中,我使用以下代碼將joda datetime存儲在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等。

它沒有正確計算差值。

什么東西少了 ??

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();

只需使用本機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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM