2013-06-11 3 views
0

Работает хронометр Но когда я пытаюсь получить, сколько времени истекает, используя следующую формулу.Как установить часовой пояс хронометра на Android?

%% SystemClock.elapsedRealtime() - cArg.getBase()

добавляет 12 часов больше (минутная и секундная являются точными)

, кажется, что я должен установить часовой пояс. Но я не знаю, что мне делать. PLZ помочь мне.

private Chronometer jobTimerDisplay; 
protected void onCreate(Bundle savedInstanceState) { 
jobTimerDisplay = (Chronometer) findViewById(R.id.chronometer_Working); 
jobTimerDisplay.start(); 
} 


jobTimerDisplay.setOnChronometerTickListener(new OnChronometerTickListener() { 
public void onChronometerTick(Chronometer cArg) { 

     long t = SystemClock.elapsedRealtime() - cArg.getBase(); 
     sec.setText(DateFormat.format("ss", t)); 
     min.setText(DateFormat.format("mm", t)); 
     hour.setText(DateFormat.format("h", t)); 

     }}); 

ответ

1

Chronometer.getBase() возвращает долго, представляющее время UTC из его базы - в вашем случае, в то время, когда был построен хронометр.

Это не является вашей основной проблемой, но для точности, вы должны, вероятно, вызывать

jobTimerDisplay.setBase(System.currentTimeMillis()); 

непосредственно перед

jobTimerDisplay.start(); 

так, что вы ссылаетесь на время начала вместо того времени, когда хронометр был построен.

Настоящая проблема заключается в том, что вы сравниваете базовое время хронометра (которое является абсолютным моментом времени) до того времени, когда работало устройство Android.

То, что вы, вероятно, хотите, чтобы сравнить базовое время хронометра с текущим временем:

long elapsedTime = System.getCurrentTimeMillis() - cArg.getBase(); 

Имейте в виду, что даты в Java (и большинстве языков) не имеют часовых поясов. Даты хранят свое время как длинное смещение от даты Java Epoch, в UTC. Вы не получаете часовой пояс, пока не отформатируете дату, либо форматируя его явно, , либо явно или неявным образом вызывая метод toString(), скажем, используя его в инструкции System.out.println.

После того, как вы уложились, вы можете перейти к тому, что класс DateFormat не форматирует longs, он форматирует даты (если у вас нет пользовательского класса DateFormat, в этом случае я бы предложил переименовать его чтобы избежать путаницы).

Смежные вопросы