如何在Android App中获取两个日期之间的时差?

时间:2014-08-18 02:32:01

标签: java android timer chronometer

我试图实现一个时间计数器(从0开始计数),它基本上获取保存的时间变量(startTime,用户点击按钮后立即创建)并减去当前时间(日历。 getInstance()可能?)所以结果是两次之间的差异(在HH:MM:SS中)。这个方法将在计时器的每个刻度上运行,以便文本视图每秒更新一次,有效地创建我的计时器。

现在,我采用这条迂回路线,因为即使应用程序被杀,我也能找到保存已用时间的唯一方法。这是因为startTime变量在创建后立即保存到SharedPreferences,并且在每个Tick中,系统只需查找startTime和当前时间之间的差异即可在现场计算我的计时器。

现在,我已尝试将startTime作为Calendar变量并初始化为:

 Calendar startTime = Calendar.getInstance();

然后

 elapsedTime = startTime - Calendar.getInstance();

但显然,这不起作用。

在一个用C#编写的类似项目中,我能够使用它,虽然使用了DateTime变量......在Android中有这样的方法吗?

如果这太复杂了,是否有更好的方法来保存计时器的进度?

请,谢谢!

1 个答案:

答案 0 :(得分:16)

如果您只有一个开始时间,使用SharedPreference来存储开始时间是完全正确的,尽管您可能希望存储Calendar.getInstance().getTimeInMillis()而不是对象本身。然后,您可以使用

恢复它
long startMillis = mSharedPreferences.getLong(START_TIME_KEY, 0L);
Calendar startTime = Calendar.getInstance();
startTime.setTimeInMillis(millis);

计算差异通常比毫秒更容易:

long now = System.currentTimeMillis();
long difference = now - startMillis;

然后您可以使用DateUtils.formatElapsedTime()

输出它
long differenceInSeconds = difference / DateUtils.SECOND_IN_MILLIS;
// formatted will be HH:MM:SS or MM:SS
String formatted = DateUtils.formatElapsedTime(differenceInSeconds);