codemoonger
codemoonger

Reputation: 663

When time difference gets calculated the values is off

I have a timepicker for a start time and an end time. It's in Sweden so here is 24 hour clock. If I set the start time at 23:00 and the end time at 02:00 it should be 3 hours difference. But in this case its 22 hours.

I calculate the difference lite this:

String a =""+Math.abs(diff/(60*60*1000)%24);
String b =""+Math.abs(diff/(60*1000)%60);

How can this be fixed?

UPDATE

Here is some more code:

DateFormat formatter = new SimpleDateFormat("HH:mm");

Date date1 = formatter.parse(str_time1);
Date date2 = formatter.parse(str_time2);

long diff = date2.getTime() - date1.getTime();

String a =""+Math.abs(diff/(60*60*1000)%24);
String b =""+Math.abs(diff/(60*1000)%60);

UPDATE 2

Here is my timepickerdialog and maybe the error start even here:

final Calendar c = Calendar.getInstance();
mHour = c.get(Calendar.HOUR_OF_DAY);
mMinute = c.get(Calendar.MINUTE);

// Launch Time Picker Dialog
final TimePickerDialog timePickerDialog = new TimePickerDialog(this,
                new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay,
int minute) {
startworkFrom.setText(hourOfDay + ":" + minute);
                   }
}, mHour, mMinute, true);
timePickerDialog.show();

Upvotes: 2

Views: 75

Answers (3)

codemoonger
codemoonger

Reputation: 663

Here is a solution to the problem I had:

public int theTimeMachineHours(EditText a, EditText b) throws Exception{
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm");
    Date startDate = simpleDateFormat.parse(a.getText().toString());
    Date endDate = simpleDateFormat.parse(b.getText().toString());

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

    return hours;
}

Upvotes: 1

ישו אוהב אותך
ישו אוהב אותך

Reputation: 29794

Try using kk:mm instead HH:mm

So change the code to:

DateFormat formatter = new SimpleDateFormat("kk:mm");

Upvotes: 0

Ashwani
Ashwani

Reputation: 1284

this might help:

  result_time = (end_time - start_time +24) % 24;
  // +24 to avoid the result from going to negative

where end_time is your ending time i.e 02:00 start_time is starting time i.e 23:00 and % is modulo operator

Upvotes: 0

Related Questions