【问题标题】:How to get time difference between two dates in Android App?如何在Android App中获取两个日期之间的时差?
【发布时间】:2014-08-18 02:32:00
【问题描述】:

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

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

现在,我尝试将我的 startTime 设置为 Calendar 变量并进行如下初始化:

 Calendar startTime = Calendar.getInstance();

然后

 elapsedTime = startTime - Calendar.getInstance();

但显然,这行不通。

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

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

请,谢谢!

【问题讨论】:

  • Java 不支持运算符重载,因此除了原始数字类型(甚至 BigInteger)之外,无法在任何东西上使用 - 运算符。
  • 如果您要对这些时间值做的唯一事情是减去它们以获得经过的时间,那么 System.currentTimeMillis 是否足以满足您的目的?

标签: java android timer chronometer


【解决方案1】:

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

【讨论】:

  • 老实说还没想到,我马上试试,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-13
  • 2013-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多