我在从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;
}
};
我无法做对。有什么建议?谢谢。
答案 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);
希望这有帮助。