繁体   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