如何通过在android中使用event.timestamp来获取纪元时间戳

时间:2013-11-01 05:27:59

标签: android timestamp sensor unix-timestamp logfile

我在从onSensorChanged方法获取时间戳字符串时遇到问题,而不是将其写入日志文件,如此示例Magnitic Timestamp列,我通过创建传感器应用程序来研究java。

在这个应用程序中,我使用Calendar和Date方法来获取其他传感器的时间戳,但在这种情况下,我只想使用时间戳。

结果是:1970/01 / 01_08:59:59:926但是我想得到这样的日期和时间:2013/11 / 01_14:17:02:673

我使用以下代码编写日志文件:

final SensorEventListener magniListener = new SensorEventListener() {
    private float magnidT;
    private long magniLogFileTimestamp;

    @Override
    public void onSensorChanged(SensorEvent event) {
        magniLogFileTimestamp = (event.timestamp - System.nanoTime()) / 1000000L;
        if (magnitimestamp != 0) {
            magnidT = (event.timestamp - magnitimestamp);
            magniValueX = event.values[0];
            magniValueY = event.values[1];
            magniValueZ = event.values[2];
            //here write the sensor values and timestamp to CSV file
            if (magniFile != null) {
                magniFile.print(String.valueOf(sensorTimestamp
                        .format(magniLogFileTimestamp)));
                //sensorTimestamp = new SimpleDateFormat("yyyy/MM/dd_HH:mm:ss:SSS");
                magniFile.print("," + String.valueOf(magniValueX) + ","
                        + String.valueOf(magniValueY) + ","
                        + String.valueOf(magniValueZ));
                magniFile.println();
            }
        }
        magnitimestamp = event.timestamp;
        magniX.setText("X-axis: " + String.valueOf(magniValueX));
        magniY.setText("Y-axis: " + String.valueOf(magniValueY));
        magniZ.setText("Z-axis: " + String.valueOf(magniValueZ));
        magnDelayValue.setText("Magnitic Delay: "
                + String.valueOf(magnidT * NS2MS) + " ms");
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
        magnitimestamp = 0;
        magniLogFileTimestamp = 0;
    }
};

我无法做对。有什么建议?谢谢。

2 个答案:

答案 0 :(得分:0)

我认为问题在于magniLogFileTimestamp = (event.timestamp - System.nanoTime()) / 1000000L;。如果用当前时间减去时间戳,那么你得到的偏移时间相当小,因此日期值接近纪元(1970/01/01)。

不要直接减去它,只需直接使用event.timestamp

magniFile.print(sensorTimestamp.format(event.timestamp / 1000000));

答案 1 :(得分:0)

如果您想以毫秒为单位获取纪元,请使用:

System.currentTimeMillis();

如果您想获得可打印日期,请尝试:

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = new Date();
String datevalue = dateFormat.format(date);

希望这有帮助。