如何计算android中两个时间选择器之间的时间差?

如何计算android中两个时间选择器之间的时间差?,android,time,timepicker,Android,Time,Timepicker,我能够找出两个时间间隔之间的差异,但当第一时间12:00或00:00和第二时间是任何其他时间时,我无法得到准确的差异。相反,我得到了一个负的差异。经过调试,我发现时间实际上是在1970年1月。我无法用今天的时间来修正它并计算差异 package com.cksapp.memoryin; import androidx.appcompat.app.AppCompatActivity; import android.app.TimePickerDialog; import android.con

我能够找出两个时间间隔之间的差异,但当第一时间12:00或00:00和第二时间是任何其他时间时,我无法得到准确的差异。相反,我得到了一个负的差异。经过调试,我发现时间实际上是在1970年1月。我无法用今天的时间来修正它并计算差异

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

您仅使用小时和分钟解析时间,而不提供sdf将假定为1970年1月1日的年、月和日

您应该以不同的方式执行此操作:使用calendar.getInstance()初始化每个日期的calendar对象,这将为您提供一个具有今天日期的实例,然后根据选择器中的小时和分钟设置这两个实例的小时和分钟,并检查其时间(以毫秒为单位)之间的差异

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

你能给我一个关于如何使用calendar.getInstance为每个日期初始化calendar对象的示例吗。谢谢但是,我已经在onCreate方法中以上述方式进行了初始化。如果这不是要执行的相关修改,请在我的代码中指出必须执行更改的位置。谢谢您应该在onTimeSet回调中执行此操作,并将结果保存在字段中(而不是现在保存的字符串)。然后您可以在onClick上对两个日历对象进行比较