【问题标题】:When time difference gets calculated the values is off当计算时间差时,值关闭
【发布时间】:2023-03-19 08:06:01
【问题描述】:

我有一个开始时间和结束时间的时间选择器。它在瑞典,所以这里是 24 小时制。如果我将开始时间设置为 23:00,结束时间设置为 02:00,则应该相差 3 小时。但在这种情况下,它是 22 小时。

我用这个来计算差异:

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

如何解决这个问题?

更新

这里还有一些代码:

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

更新 2

这是我的时间选择器对话框,甚至可能从这里开始出现错误:

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

【问题讨论】:

  • 我在这里没有发现任何错误。 startworkFrom.setText(hourOfDay + ":" + minute); 输出了正确的值吗?
  • 如果我选择时间 00:00,我会得到 0:0,这是不对的。
  • 顺便说一句,如果您可以通过简单的 int 比较简单地检查和比较时间,为什么还要使用 DateFormat 和 Date?只是好奇。
  • 因为我不知道我能做到这一点。你知道我是个菜鸟。
  • 哇...不知道。给我一些时间来找到一个示例代码检查时间之间的值...

标签: java android time difference


【解决方案1】:

这是我遇到的问题的解决方案:

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

【讨论】:

    【解决方案2】:

    这可能会有所帮助:

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

    end_time 是您的结束时间,即 02:00 start_time 是开始时间,即 23:00 并且 % 是模运算符

    【讨论】:

    • 这并没有解决问题。我仍然得到奇怪的值。
    【解决方案3】:

    尝试使用 kk:mm 代替 HH:mm

    所以把代码改成:

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

    【讨论】:

    • 没有区别。如果我没说清楚,我不希望 AM 和 PM 格式只是为了说明这一点。也许问题是当我使用 timepickerdialog 选择 23:0002:00 时,在我的edittext字段中设置的值是 23:002:0 它缺少一个零。
    • @alexandermogren:可能是语言环境问题。试试 DateFormat.getDateInstance(int style, Locale locale) (docs.oracle.com/javase/7/docs/api/java/text/…)
    • 我不能这样吗? DateFormat formatter = new SimpleDateFormat("kk:mm",new Locale("SE"));
    • 尝试使用 new Locale("sv","SE")
    • 先尝试将 kk:mm 更改为之前的 HH:mm。
    猜你喜欢
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2016-05-05
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    相关资源
    最近更新 更多