【问题标题】:How to display the exactly time from sensorevent.timestamp for Android?如何显示来自 sensorevent.timestamp for Android 的准确时间?
【发布时间】:2016-12-13 15:03:55
【问题描述】:

我想显示检测到第一步的时间。但该应用程序始终显示 1970 年 1 月 1 日。有人会检查出什么问题以及如何更改它吗?这是我的代码:

public void run() {
    SensorManager mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    Sensor mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);

    mSensorManager.registerListener(new SensorEventListener() {
        @Override
        public void onSensorChanged(SensorEvent sensorEvent) {
            long timeStamp = sensorEvent.timestamp / 1000000;
            textView_moveTime.setText(DateUtils.getRelativeTimeSpanString(timeStamp));
        }

        @Override
        public void onAccuracyChanged(Sensor sensor, int i) {

        }
    }, mSensor, mSensorManager.SENSOR_DELAY_FASTEST);
}

【问题讨论】:

  • 我认为 Jan 01 1970 等于 0(即日期/时间的开始)。所以也许看看 0 是否被返回/设置。
  • 由于timestamp是纳秒级精度,不太可能在Unix纪元时基中,因此除以1000000不太可能。它可能使用相同的系统as nanoTime(),在这种情况下,您只使用它来计算从某个起点开始的相对时间。
  • 非常感谢!我想我找到了原因。

标签: java android time sensors android-dateutils


【解决方案1】:

SensorEvent 以纳秒为单位报告系统启动后的时间(包括睡眠时间)。 要将其转换为以纳秒为单位的绝对时间,请使用以下公式:

(DateTime.now().getMillis() - SystemClock.elapsedRealtime()) * 1000000
                + sensorEvent.timestamp

【讨论】:

  • 抱歉,什么是“DateTime”...AS 不认为这是任何有效类别。
猜你喜欢
  • 2021-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-08
  • 1970-01-01
相关资源
最近更新 更多