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

标签 java android timer chronometer

我正在尝试实现一个时间计数器(从 0 开始计数),它基本上获取保存的时间变量(startTime,在用户点击按钮后立即创建)并减去当前时间(Calendar.getInstance( ) 也许吧?) 这样结果就是两次之间的差异(在 HH:MM:SS 中)。此方法将在计时表的每个刻度上运行,以便每秒更新 TextView ,从而有效地创建我的计时器。

现在,我选择了这条迂回路线,因为即使应用程序被终止,这是我能想到的保存耗时的唯一方法。这是因为 startTime 变量一创建就被保存到 SharedPreferences 中,并且在每次 Tick 期间,系统通过找出 startTime 和当前时间之间的差异来当场计算我的计时器。

现在,我已经尝试将我的 startTime 设置为日历变量并按如下方式初始化:

 Calendar startTime = Calendar.getInstance();

然后

 elapsedTime = startTime - Calendar.getInstance();

但显然,这是行不通的。

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

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

拜托,谢谢!

最佳答案

如果您只有一个开始时间,使用 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);

关于java - 如何在Android App中获取两个日期之间的时差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25355611/

相关文章:

java - 带有 Sprite 表的 ArrayIndexOutOfBoundsException

java - 提示用户是否希望应用程序搜索整数或字符串

java - Io异常: The Network Adapter could not establish the connection

Android MediaPlayer.start 不启动

android:长时间运行计时器

java - 禁用按钮后刷新整数值

ios - 如何使按钮在按住时不断调用函数(SpriteKit)

java - 我正在搜索用于清除后台运行应用程序并从最近的应用程序菜单中删除所有其他应用程序的代码

java - 我怎样才能正确地做到这一点,以便能够在 DBSelectQuery 类中进行选择?

移植到黑莓 10 的 Android 应用程序没有使用正确的语言翻译