2013-04-30 4 views
2

작은 알람 응용 프로그램을 만들고 싶습니다. 나는 시스템 시간 (현재)과 시간 사이의 시간차를 계산하려고한다. 사용자가 선택한 TimePicker부터. 나는 좋은 해결책을 찾지 못했습니다. 여기 내 코드는timePicker와 System Time 사이의 시간차를 얻는 방법

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_alarm_list); 
    timePicker = (TimePicker) findViewById(R.id.timePicker1); 
    timePicker.setIs24HourView(true); 
    b = (Button) findViewById(R.id.button1); 
    c = Calendar.getInstance(); 
    timePicker.setOnTimeChangedListener(new OnTimeChangedListener() { 





    @Override 
    public void onTimeChanged(TimePicker arg0, int hours, int minutes) { 
     c.set(Calendar.HOUR_OF_DAY, hours); 
     c.set(Calendar.MINUTE, minutes); 

     chosenTimeMills = c.getTimeInMillis(); 
    } 
}); 


b.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View arg0) { 
          Date currentDate = new Date(System.currentTimeMillis()); 
       c.set(Calendar.HOUR_OF_DAY,currentDate.getHours()); 
       c.set(Calendar.MINUTE, currentDate.getMinutes()); 
       systemTimeMills = c.getTimeInMillis(); 

       long difference =systemTimeMills-chosenTimeMills; 
       Date date = new Date(difference); 
       Log.d("TAGG", "Difference is: "+date.getHours()+" Hours and "+date.getMinutes()+" minutes"); 



    } 
}); 
} 

나는 대답을 갖고 싶다. 고마워요, Usman !!!

답변

3

c 사용자가 만든 및 c2 현재 date time에 대한 인스턴스를 ㄱ 것 Calender 인스턴스 여기

Calendar c2 = Calendar.getInstance(); 
c2.set(Calendar.HOUR_OF_DAY, 22); 
c2.set(Calendar.MINUTE, 30); 
long sub = c2.getTimeInMillis() - c.getTimeInMillis(); 

을 시도합니다. conTimeChanged

변수 hour에서 설정 한 값으로 Calendar 인스턴스가, 어디 편집onClick에서

당신이

Calendar cal = Calendar.getInstance(); 
long diff = c.getTimeInMillis() - cal.getTimeInMillis(); 
long diffInSec = TimeUnit.MILLISECONDS.toSeconds(diff); 
int hour = (int) (diffInSec/(60 * 60)); 
int minremaining = (int) (diffInSec % (60 * 60)); 
int min = (int) (minremaining/(60)); 
int secondsRemaining = (int) (minremaining % (60)); 
Log.e("TAG", "Difference in milliss calendar  " + diff); 
Log.e("TAG", "hour  " + hour); 
Log.e("TAG", "min  " + min); 
Log.e("TAG", "sec  " + secondsRemaining); 

을 시도 할 수 있습니다


, minsecondsRemaining은 남은 시간을 알려줍니다.

+0

작동하지 않습니다. 내가 업데이트 한 코드를 참조하십시오. –

+0

@UsmanRiaz : plz 편집 된 답변을 확인하십시오. –

1

음, 시스템 시간은 밀리 초입니다. 선택한 시간을 밀리 초 단위로 변환하면됩니다.

+0

내 시스템 시간이 12시간 형식이며 포착 된 시간이 나에게 문제를 일으키는 여부 것, 24hours에서인가? –

+0

아니요, 둘 다 123456789와 같은 숫자입니다. 총 시간은 밀리 초입니다. – user1304

2

TimePicker을 사용하면 시와 분에만 액세스 할 수 있습니다.. 나는 currentSystemTime과 TodayTime + Hour and Minute의 차이를 원한다고 제안하고있다.

예 : 사용자가 10:00 (currentTime)에 20:35을 선택하면 10:35이 표시됩니다. 옳은? 그래서 여기

내 솔루션 (: Github full example 여기에 전체 예)입니다

@Override 
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) { 
    pickedHour = hourOfDay; 
    pickedMinute = minute; 
} 

public void onClickListenerOfYourBUtton(View view) 
{ 
    long currentTime = System.currentTimeMillis(); 
    long diffTime = 0; 

    calendar = Calendar.getInstance(); 
    sysCurrent.setText(currentTime +""); 

    calendar.setTimeInMillis(currentTime);//set to currentTime to know the current day 
    calendar.set(Calendar.HOUR_OF_DAY, pickedHour); 
    calendar.set(Calendar.MINUTE, pickedMinute); 

    diffTime = calendar.getTimeInMillis()- currentTime; // Here, i get the difference in hours, minutes, ...for the same day 



    difference.setText(String.format("%02d:%02d", 
      diffTime/hoursInMilis, 
      (diffTime%hoursInMilis)/minutesInMilis)); //Formating string 




} 
관련 문제