如何从Date对象设置Android Chronometer基准时间?

时间:2012-06-02 13:54:39

标签: android chronometer

我遇到了从特定时间开始计时器的问题。 有一个Date对象我希望我的计时器从:

开始
Date d = new Date(); //now, just for example
chronometer.setBase(d.getTime()); //long value of d
Log.d("Date: " , "d.getTime() time is [" + d.getTime() +"]");
Log.d("Chron: " , "chronometer.getBase() is [" + chronometer.getBase() +"]");
//let's print out elapsedRealtime from official sample
Log.d("Chron: " , "SystemClock.elapsedRealtime() is [" + SystemClock.elapsedRealtime() +"]");

输出:

06-02 13:35:23.025: D/Date:(928): d.getTime() time is [1338644123032]
06-02 13:35:23.037: D/Chron:(928): chronometer.getBase() is [1338644123032]
06-02 13:35:23.037: D/Chron:(928): SystemClock.elapsedRealtime() is [11624388]

实际上,为什么这个长时间值不同(11624388和1338644123032)?

当我从基座开始我的天文台时

chronometer.setBase(SystemClock.elapsedRealtime());

- 它总是正常(“00:00”和上升)

但是当我尝试从过去的日期(昨天)开始设置日期时:

chronometer.setBase(yesterday.getTime());

- 显示“00:0(”并且每秒更新最新的字符“”,“*”,“/”和其他

请问您如何将计时器基座设置为Date对象?

2 个答案:

答案 0 :(得分:29)

我实际上遇到了类似的问题(日期来自外部服务,而不是数据库)我希望显示日期的年龄。

事实证明这很简单:

long lastSuccess = serviceDate.getTime(); //Some Date object
long elapsedRealtimeOffset = System.currentTimeMillis() - SystemClock.elapsedRealtime();
pollAgeView.setBase(lastSuccess - elapsedRealtimeOffset);
pollAgeView.start();

答案 1 :(得分:3)

  

实际上,为什么这个长时间值不同(11624388和1338644123032)?

SystemClock.elapsedRealtime()是设备开启后的毫秒数。其他值基于System.currentTimeMillis(),即自Unix时代以来的毫秒数。

  

请问您如何将计时器基座设置为Date对象?

你没有。这不是Chronometer的用途。引用the documentation for Chronometer

  

您可以在elapsedRealtime()时基中给它一个开始时间,并从中计算,或者如果您没有给它一个基准时间,它将使用您调用start()的时间。