【问题标题】:Subtract one hour from another [duplicate]从另一个小时中减去一个小时[重复]
【发布时间】:2020-10-13 19:04:15
【问题描述】:

我有两个小时,格式为 (HH: mm),我已传递给 Date 以减去。

通过减去它们,我得到以毫秒为单位的差异,然后将它们转换为小时除以 3600,然后转换为分钟,首先除以 60,然后进行 % 运算。

例如,如果我将开始时间设置为 20:00,将结束时间设置为 22:00,则结果为 0 小时 2 分钟。

有人看到错误吗?

这是我的代码:

 hIni.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                int hour = calendario.get(Calendar.HOUR_OF_DAY);
                int minute = calendario.get(Calendar.MINUTE);

                final TimePickerDialog.OnTimeSetListener time = new TimePickerDialog.OnTimeSetListener() {
                    @Override
                    public void onTimeSet(TimePicker timePicker, int hour, int minute) {
                        calendario.set(Calendar.HOUR_OF_DAY, hour);
                        calendario.set(Calendar.MINUTE, minute);

                        horaInicio = String.format("%02d:%02d", hour, minute);
                        hIni.setText(horaInicio);

                        if (!horaFin.equals(""))
                        {
                            if  (testChar(hFin.toString()))
                            {
                                Date hI = ParseHora(horaInicio);
                                Date hF = ParseHora(horaFin);


                                //obtienes la diferencia de las fechas
                                long difference = Math.abs(hF.getTime() - hI.getTime());

                                //obtienes la diferencia en minutos ya que la diferencia anterior esta en milisegundos
                                difference= difference / (60 * 1000);

                                horasDur=difference/60;
                                minDur = difference%60;

                                dur.setText(horasDur +" horas "+minDur+" minutos");

                            }
                        }
                    }
                };
                new TimePickerDialog(NueAvaCuando.this,time, hour, minute, true).show();
            }
        });

        hFin.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                int hour = calendario.get(Calendar.HOUR_OF_DAY);
                int minute = calendario.get(Calendar.MINUTE);

                final TimePickerDialog.OnTimeSetListener time = new TimePickerDialog.OnTimeSetListener() {
                    @Override
                    public void onTimeSet(TimePicker timePicker, int hour, int minute) {
                        calendario.set(Calendar.HOUR_OF_DAY, hour);
                        calendario.set(Calendar.MINUTE, minute);
                        horaFin = String.format("%02d:%02d", hour, minute);
                        hFin.setText(horaFin);

                        if (!horaInicio.equals(""))
                        {
                            if  (testChar(hIni.toString()))
                            {
                                Date hI = ParseHora(horaInicio);
                                Date hF = ParseHora(horaFin);

                                //obtienes la diferencia de las fechas
                                long difference = Math.abs(hF.getTime() - hI.getTime());

                                //obtienes la diferencia en horas ya que la diferencia anterior esta en milisegundos
                                difference= difference / (60 * 60 * 1000);

                                horasDur=difference/60;
                                minDur = difference%60;

                                dur.setText(horasDur +"horas "+minDur+" minutos");


                            }
                        }

                    }
                };
                new TimePickerDialog(NueAvaCuando.this,time, hour, minute, true).show();
            }
        });

方法如下:

public static Date ParseHora(String fecha)
    {
        SimpleDateFormat formato = new SimpleDateFormat("HH:mm");
        Date fechaDate = null;
        try {
            fechaDate = formato.parse(fecha);
        }
        catch (ParseException ex)
        {
            System.out.println(ex);
        }
        return fechaDate;
    }


 public boolean testChar(String cadena) {
        if (!Character.isDigit(cadena.charAt(0)))
            return true;
        else
            return false;
    }

非常感谢

【问题讨论】:

标签: java android datetime


【解决方案1】:

问题出在这里,在onTimeSet方法内部,定义在传递给hFin.setOnClickListener的监听器内部:

difference= difference / (60 * 60 * 1000);

在执行此语句之前,difference 以毫秒为单位。之后的代码需要几分钟。但是,除以1000 会将毫秒转换为秒,因此除以60 * 1000 已经可以得到分钟,因此除以60 * 60 * 1000 会转换为小时,即不是你想要的。

那部分代码应该是:

difference = difference / (60 * 1000);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-13
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    相关资源
    最近更新 更多