simpledateformat添加30分钟到实际时间

时间:2018-06-02 12:52:45

标签: android simpledateformat

我正在尝试创建一个简单的音乐播放器应用。我想在左边显示歌曲的当前运行时间,在右边显示歌曲的剩余持续时间。以 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();**

2 个答案:

答案 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"));