Chandrakishore Reddy
Chandrakishore Reddy

Reputation: 33

How do I calculate time difference between two time pickers in android?

I am able to find out the difference between two time intervals, but when the time 1st 12:00am or 00:00 and 2nd time is any other time, I am not getting accurate difference. Instead I am getting a negative difference. Upon debugging I figured out the time is actually taking of the year 1970 January. I am unable to correct it by taking today's time and calculate the difference.

package com.cksapp.memoryin;

import androidx.appcompat.app.AppCompatActivity;

import android.app.TimePickerDialog;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;

import com.google.firebase.Timestamp;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.FirebaseFirestoreSettings;

import java.security.CodeSigner;
import java.sql.Time;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
//import java.util.Date;

public class HourlyCalculator extends AppCompatActivity {
    EditText wage;
    TextView t1, t2, t3;
    ImageView i1, i2;
    Button b1;
    int minutestotal;
    String timex, timey;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.calculator_hourly);
        wage = findViewById(R.id.hourlyrate);
        t1 = findViewById(R.id.starttimetext);
        t2 = findViewById(R.id.endtimetext);
        t3 = findViewById(R.id.finaltime);
        i1 = findViewById(R.id.startimage);
        i2 = findViewById(R.id.endimage);
        b1 = findViewById(R.id.calculatebutton);


        Calendar c = Calendar.getInstance();

        final int hour = c.get(Calendar.HOUR_OF_DAY);
        final int mins = c.get(Calendar.MINUTE);

        i1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final TimePickerDialog time = new TimePickerDialog(HourlyCalculator.this, new TimePickerDialog.OnTimeSetListener() {
                    @Override
                    public void onTimeSet(TimePicker view, int hourOfDay1, int minute1) {
                        timex = hourOfDay1 + ":" + minute1;
                        t1.setText(timex);
                        Log.d("Time1", timex);
                    }
                },hour, mins, true);
                time.show();
            }
        });

       i2.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               final TimePickerDialog time2 = new TimePickerDialog(HourlyCalculator.this, new TimePickerDialog.OnTimeSetListener() {
                   @Override
                   public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                       timey = hourOfDay + ":" + minute;
                       t2.setText(timey);
                       Log.d("Time1", timey);
                   }
               },hour,mins,true);
               time2.show();
           }
       });
       b1.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
               try {
                   Date a = sdf.parse(timex);
                   Date b = sdf.parse(timey);
                   long difference = a.getTime() - b.getTime();
                   Log.d("Time", String.valueOf(difference));
                  /* minutestotal = (int) (difference/60000);
                   Log.d("Timearey", String.valueOf(minutestotal));
                   int totalwageinitital = Integer.parseInt(wage.getText().toString());
                  double totalwagepermin = totalwageinitital/60;
                  double finalprice = minutestotal * totalwagepermin;

                   t3.setText(String.valueOf(finalprice));*/
               } catch (ParseException e) {
                   e.printStackTrace();
               }
           }
       });
    }
}

Upvotes: 0

Views: 560

Answers (1)

Androidz
Androidz

Reputation: 401

You are parsing the time using only hours and minutes, without providing the year, month and day the sdf will assume Jan 1st, 1970.

You should do this in a different way: initialize a calendar object for each date using Calendar.getInstance(), this will give you an instance with today's date, then set the hours and minutes for those 2 instances according to the hours and minutes in the picker and check the difference between their timeInMilliseconds.

Calendar time = Calendar.getInstance();
time.set(Calendar.HOUR_OF_DAY, hour);
time.set(Calendar.MINUTE, minute);

Upvotes: 1

Related Questions