【问题标题】:How to calculate difference between times如何计算时间差
【发布时间】:2021-10-20 16:07:47
【问题描述】:

如何计算以分钟为单位的时间差?我使用了 2 个模板 T1 和 T2 来选择时间并尝试使用函数但我做不到

>**first clock**
        *T1*.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                TimePickerDialog timePickerDialog = new TimePickerDialog(  
                        MainActivity.this,
                        new TimePickerDialog.OnTimeSetListener() {
                            @Override
                            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                                t1h = hourOfDay;
                                t1m = minute;
                                Calendar calendar = Calendar.getInstance();
                                calendar.set(0, 0, 0,t1h,t1m);
                        T1.setText(android.text.format.DateFormat.format( "hh-mm a", calendar));
                   }}, 12, 0, false);
                timePickerDialog.updateTime(t1h,t1m);
                timePickerDialog.show();
            } });
// **second clock**
        T2.setOnClickListener(new View.OnClickListener() {
       // similiar cod
// **try to canculate but i can't**
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                SimpleDateFormat sdf = new SimpleDateFormat("hh-mm");
                double c,x,y;
                String S3 = T1.getText().toString();
                String S4 = T2.getText().toString();
                x = Double.parseDouble(S3);
                y = Double.parseDouble(S4);
                c = y - x;
                String S = Double.toString(c);
                sr.setText(S);
            }    });  }}

https://github.com/Icefenix1996/time-calculate

【问题讨论】:

  • 顺便考虑扔掉长期过时且臭名昭著的麻烦SimpleDateFormat和朋友。看看您是否可以使用 desugaring 或将 ThreeTenABP 添加到您的 Android 项目中,以便使用现代 Java 日期和时间 API java.time。与它一起工作要好得多。请参阅 Arvind Kumar Avinash 的答案。

标签: java android function android-studio time


【解决方案1】:

java.time

java.util 日期时间 API 及其格式化 API SimpleDateFormat 已过时且容易出错。建议完全停止使用,改用modern Date-Time API*

使用现代日期时间 API java.time 的解决方案: 使用 java.time.Duration 计算两次之间的持续时间(差异)。 DurationISO-8601 standards 为模型,并作为JSR-310 implementation 的一部分与Java-8 一起引入。 Java-9 引入了一些更方便的方法。

演示:

import java.time.Duration;
import java.time.LocalTime;

public class Main {
    public static void main(String[] args) {
        LocalTime start = LocalTime.of(10, 20, 30);
        LocalTime end = LocalTime.of(11, 25, 40);
        Duration duration = Duration.between(start, end);
        System.out.println(duration);

        // Custom format
        // ####################################Java-8####################################
        String formattedElapsedTime = String.format("%02d:%02d:%02d", duration.toHours() % 24,
                duration.toMinutes() % 60, duration.toSeconds() % 60);
        System.out.println(formattedElapsedTime);
        // ##############################################################################

        // ####################################Java-9####################################
        formattedElapsedTime = String.format("%02d:%02d:%02d", duration.toHoursPart(), duration.toMinutesPart(),
                duration.toSecondsPart());
        System.out.println(formattedElapsedTime);
        // ##############################################################################
    }
}

输出:

PT1H5M10S
01:05:10
01:05:10

ONLINE DEMO

通过 Trail: Date Time 了解有关 modern Date-Time API* 的更多信息。


* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 和 7 . 如果您正在为一个 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    • 2018-10-16
    相关资源
    最近更新 更多