2013-06-11 2 views
0

크로노 미터가 똑딱 거리고 있습니다 하지만 다음 공식을 사용하여 얼마나 많은 시간이 경과하는지 알아 내려고 시도합니다.안드로이드에서 크로노 미터의 시간대를 설정하는 방법은 무엇입니까?

%% 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.start(); 

전에

jobTimerDisplay.setBase(System.currentTimeMillis()); 

를 호출 할 때 크로노 미터 건설되었다.

실제 문제는 크로노 미터의 기본 시간 (절대 시간)과 Android 장치가 실행 된 시간을 비교하는 것입니다. 당신은 아마 원하는 것은

는 현재 시간과 크로노 미터의 기본 시간을 비교하는 것입니다 :

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

자바 (그리고 대부분의 언어)에서 날짜가 시간대가없는 것을 알고 있어야합니다. 날짜는 Java Epoch 날짜의 긴 오프셋 (UTC)으로 시간을 저장합니다. 명시 적으로 서식을 지정하거나 으로 Date를 서식 지정하거나 System.out.println 문에서 명시 적 또는 암시 적으로 toString() 메서드를 호출하여 Date를 포맷 할 때까지 시간대를 얻지 못합니다.

일단 정정되면 DateFormat 클래스가 long 형식을 지정하지 않고 Date 형식을 지정하지 않는다는 사실을 처리 할 수 ​​있습니다 (사용자 정의 DateFormat 클래스가 없으면 이름을 바꿀 것을 제안합니다. 혼동을 피하기 위해).

관련 문제