2013-01-01 25 views
6

StartTime ve EndTime gibi iki dizi değişkenim var. EndTime'ı StartTime ile çıkararak TotalTime'ı hesaplamam gerekiyor. aşağıdaki gibiAndroid'de iki kez arasındaki farkı hesaplayın

StartTime ve BitişZamanı biçimi: Saat ve Dk Format

StartTime = "08:00 AM"; 
EndTime = "04:00 PM"; 

TotalTime. Bunu Android'de nasıl hesaplayabilirim?

+0

süresi sınıfı Android'de bunun için yararlıdır: teşekkür Hey http://stackoverflow.com/a/12739537/693752 – Snicolas

cevap

27

Kodu aşağıdan deneyin.

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm"); 
date1 = simpleDateFormat.parse("08:00 AM"); 
date2 = simpleDateFormat.parse("04:00 PM"); 

long difference = date2.getTime() - date1.getTime(); 
days = (int) (difference/(1000*60*60*24)); 
hours = (int) ((difference - (1000*60*60*24*days))/(1000*60*60)); 
min = (int) (difference - (1000*60*60*24*days) - (1000*60*60*hours))/(1000*60); 
hours = (hours < 0 ? -hours : hours); 
Log.i("======= Hours"," :: "+hours); 

Çıktı-8

+0

u, fark her zaman negatif, başlangıç ​​saatim 12:30 ve bitiş saati 1:00 idi. formatı "HH: mm a" olarak verdim ve fark hala negatif. Althogh bitiş zamanı başlangıç ​​zamanından daha büyüktür. – Munazza

+0

Tarihi de string ile mi vermem gerekiyor? – Munazza

+0

01:00 PM yerine 01:00 kullanın ve ne olduğunu deneyin. –

3

DateFormat göz at :: Saat, sen parse (String kaynak) yöntemi ile dizeleri ayrıştırmak için kullanabilirsiniz ve kolayca iki Tarihlerini işleyebilirsiniz İstediğiniz şeyi elde etmek için nesne. aşağıda Düzeltilmiş kodu: Tarihi göstermek için

Date myDate = new Date(difference); 

tarih farkı için

DateFormat df = DateFormat.getInstance(); 
Date date1 = df.parse(string1); 
Date date2 = df.parse(string2); 
long difference = date1.getTime() - date2.getTime(); 

days = (int) (difference/(1000*60*60*24)); 
hours = (int) ((difference - (1000*60*60*24*days))/(1000*60*60)); 
min = (int) (difference - (1000*60*60*24*days) - (1000*60*60*hours))/(1000*60); 

String diffHours = df.format(hours); 

:

String diff = df.format(myDate); 
0

bu deneyin ....

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm"); 

    try { 
     date1 = simpleDateFormat.parse("08:00 AM"); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 

    try { 
     date2 = simpleDateFormat.parse("04:00 PM"); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 

    long difference = date2.getTime() - date1.getTime(); 
    int days = (int) (difference/(1000 * 60 * 60 * 24)); 
    int hours = (int) ((difference - (1000 * 60 * 60 * 24 * days))/(1000 * 60 * 60)); 
    int min = (int) (difference - (1000 * 60 * 60 * 24 * days) - (1000 * 60 * 60 * hours)) 
      /(1000 * 60); 
    hours = (hours < 0 ? -hours : hours); 
    Log.i("======= Hours", " :: " + hours); 
2

Not hangi Chirag Raval tarafından sağlanan hangi kod Chirag p 22:00 - 07:00 saatleri arasında zaman bulmaya çalışırken rovided bazı sorunlar vardı.

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm"); 
Date startDate = simpleDateFormat.parse("22:00"); 
Date endDate = simpleDateFormat.parse("07:00"); 

long difference = endDate.getTime() - startDate.getTime(); 
if(difference<0) 
{ 
    Date dateMax = simpleDateFormat.parse("24:00"); 
    Date dateMin = simpleDateFormat.parse("00:00"); 
    difference=(dateMax.getTime() -startDate.getTime())+(endDate.getTime()-dateMin.getTime()); 
} 
int days = (int) (difference/(1000*60*60*24)); 
int hours = (int) ((difference - (1000*60*60*24*days))/(1000*60*60)); 
int min = (int) (difference - (1000*60*60*24*days) - (1000*60*60*hours))/(1000*60); 
Log.i("log_tag","Hours: "+hours+", Mins: "+min); 

Sonucu olacaktır: Saat: 9, Dk: 0

0
Try simple piece of code using For 24 hour time 
StartTime = "10:00"; 
EndTime = "13:00"; 
here starthour=10 and end hour=13 
if(TextUtils.isEmpty(txtDate.getText().toString())||TextUtils.isEmpty(txtDate1.getText().toString())||TextUtils.isEmpty(txtTime.getText().toString())||TextUtils.isEmpty(txtTime1.getText().toString())) 
    { 
     Toast.makeText(getApplicationContext(), "Date/Time fields cannot be blank", Toast.LENGTH_SHORT).show(); 
    } 
    else { 
     if (starthour > endhour) { 
      Toast.makeText(getApplicationContext(), "Start Time Should Be Less Than End Time", Toast.LENGTH_SHORT).show(); 
     } else if (starthour == endhour) { 
      if (startmin > endmin) { 
       Toast.makeText(getApplicationContext(), "Start Time Should Be Less Than End Time", Toast.LENGTH_SHORT).show(); 
      } 
      else{ 
       tvalid = "True"; 
      } 
     } else { 
      // Toast.makeText(getApplicationContext(),"Sucess"+(endhour-starthour)+(endmin-startmin),Toast.LENGTH_SHORT).show(); 
      tvalid = "True"; 
     } 
    } 
same for date also 
İlgili konular