Простое форматирование, добавление 30 дополнительных минут к фактическому времени. - PullRequest
0 голосов
/ 02 июня 2018

Я пытаюсь создать простое приложение для воспроизведения музыки.Я хочу отобразить текущее время исполнения песни слева и оставшуюся продолжительность песни справа.В формате мм: сс .Я вызываю поток, который периодически обновляет панель поиска и время влево / вправо.песня длится 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();**

1 Ответ

0 голосов
/ 02 июня 2018

Дата (длинная дата)

Выделяет объект Date и инициализирует его для представления указанного количества миллисекунд со стандартного базового времени, известного как «эпоха», а именно 1 января 1970 г., 00: 00: 00 GMT.

Так, например, new Date(1000) представляет дату January 1, 1970, 00:00:01 GMT.

SimpleDateFormat использует часовой пояс по умолчанию, если не указано иное.Вы находитесь в часовом поясе, таком как GMT+N:30?Вот почему вы видите добавленные 30 минут.Пользователи в других часовых поясах будут видеть разные результаты.

Нет смысла использовать Date/SimpleDateFormat здесь, потому что вы не работаете с фактической датой.Преобразовать миллис, возвращенные getCurrentPosition вручную. Вот пример.

...