2013-01-01 16 views
6

Ho due variabili stringa come StartTime e EndTime. Devo calcolare il TotalTime sottraendo EndTime con StartTime.Calcola la differenza tra due volte in Android

il formato del StartTime e EndTime è così come segue:

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

TotalTime in ore e Minuti Formato. Come si calcola questo in Android?

+0

La classe durata è utile per questo in Android: http://stackoverflow.com/a/12739537/693752 – Snicolas

risposta

27

Provare sotto il codice.

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); 

uscita - Ore :: 8

+0

Hey grazie la differenza è sempre negativa, la mia ora di inizio era 12:30 e l'ora di fine era 1:00 PM. ho dato il formato "HH: mm a" e la differenza è ancora negativa. Altran l'ora di fine è maggiore dell'ora di inizio. – Munazza

+0

Devo anche dare la data con una stringa? – Munazza

+0

utilizza 01:00 PM invece di 1:00 PM e prova cosa è successo. –

3

Dai un'occhiata alla DateFormat, è possibile utilizzarlo per analizzare le corde con il metodo (String sorgente) parse e la si può facilmente manipolare le due date oggetto di ottenere ciò che vuoi

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); 

Per differenza data

Date myDate = new Date(difference); 

Il per mostrare la data:

String diff = df.format(myDate); 
0

Si prega di provare questo ....

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

Nota: Corretto codice come di seguito che forniscono da Chirag Raval perché nel codice che Chirag p abbiamo avuto alcuni problemi quando proviamo a trovare il tempo dalle 22:00 alle 07:00.

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); 

Risultato sarà: Ore: 9, Minuti: 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 
Problemi correlati