我正在尝试创建一个简单的音乐播放器应用。我想在左边显示歌曲的当前运行时间,在右边显示歌曲的剩余持续时间。以 mm:ss 格式。我正在调用一个定期更新搜索栏和左/右时间的线程。这首歌长4分36秒。所以我想要看到的是左边的 0:00 和开头右边的 4:36 。 左侧时间持续增加1秒,同时右侧减少1秒。但我所看到的是左边 30:00 ,右边是34:36。最初两次都会增加30分钟。为什么会这样?我在这里错过了什么吗?
public void updateThread(){
thread = new Thread(){
@Override
public void run() {enter code here
try{
while(mediaPlayer != null && mediaPlayer.isPlaying()){
Thread.sleep(50);
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), String.valueOf(mediaPlayer.getCurrentPosition()), Toast.LENGTH_LONG).show();
seekBar.setMax(mediaPlayer.getDuration());
seekBar.setProgress(mediaPlayer.getCurrentPosition());
leftTime.setText(String.valueOf(new SimpleDateFormat("m:ss").format(new Date(mediaPlayer.getCurrentPosition()))));
rightTime.setText(String.valueOf(new SimpleDateFormat("m:ss").format(new Date(mediaPlayer.getDuration() - mediaPlayer.getCurrentPosition()))));
}
});
}
}
catch (InterruptedException e){
e.printStackTrace();
}
}
};
thread.start();**
答案 0 :(得分:2)
日期(长日期)
分配一个Date对象并对其进行初始化,以表示自标准基准时间(" epoch",即1970年1月1日,00:00:00 GMT)以来指定的毫秒数。
因此,例如,new Date(1000)
代表日期January 1, 1970, 00:00:01 GMT
。
SimpleDateFormat
使用默认时区,除非另有说明。
您是否在GMT+N:30
等时区?这就是为什么你看到30分钟的补充。其他时区的用户会看到不同的输出。
由于您未使用实际日期,因此没有理由在此使用Date/SimpleDateFormat
。转换getCurrentPosition手动返回的millis。 Here's an example.
答案 1 :(得分:0)
将 UTC
设置为格式化程序时区:
mFormatter.setTimeZone(TimeZone.getTimeZone("UTC"));