如何在java中总计小时,分钟,秒?

时间:2016-08-10 06:52:44

标签: java datetime

我对如何在java中总计小时分钟秒数有疑问,例如我有160:00:00和24:00:00以及13:50:00和00:10:00我需要得到像198:00:00这样的大笔总和如何计算到目前为止我所尝试的是

 for(int i=0;i<addnoteobj.size();i++){


            String s =  addnoteobj.get(i).getDuration();
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm:ss");
            simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
            String[] tokens = s.split(":");
            int hours = Integer.parseInt(tokens[0]);
            int minutes = Integer.parseInt(tokens[1]);
            int seconds = Integer.parseInt(tokens[2]);
             duration = 3600 * hours + 60 * minutes + seconds;
           int j = duration/3600;
           int h= (duration%3600) / 60;
           int m = (duration % 60);


           hourss=hourss+j;
           mm=mm+h;
           sss=sss+m;

           date3 = hourss + ":" + mm + ":" + ss;
            String time = simpleDateFormat.format(new Date(duration*1000L));
            Log.d("dat",time);


            try {
                    date=simpleDateFormat.parse(s);
                    ss=ss+date.getTime();
                    date3 = simpleDateFormat.format(new Date(ss));
                  // total=dates.getTime();
                    Log.d("time",date3);
                } catch (ParseException e) {
                    e.printStackTrace();
                }


        }

但是我无法实现这一点如何做到这一点我有一个小时的列表如何获得总时数提前感谢

3 个答案:

答案 0 :(得分:2)

java.time

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

使用 java.time(现代日期时间 API)的解决方案:

您可以使用 java.time.Duration,它以 ISO-8601 standards 为模型,并作为 JSR-310 implementation 的一部分与 Java-8 一起引入。 Java-9 引入了一些更方便的方法。

假设所有的字符串都是HH:mm:ss格式,你可以将它们在:上拆分,然后在中将各部分组合成一个字符串可以使用 Duration#parse 解析的持续时间的 ISO 8601 模式

演示:

import java.time.Duration;

public class Main {
    public static void main(String[] args) {
        String[] strDurationArr = { 
                "160:00:00", 
                "24:00:00", 
                "13:50:00", 
                "00:10:00" 
        };

        Duration sum = Duration.ZERO;
        for (String strDuration : strDurationArr) {
            sum = sum.plus(parseStrDuration(strDuration));
        }

        System.out.println(formatDurationJava8Plus(sum));
        System.out.println(formatDurationJava9Plus(sum));
    }

    static Duration parseStrDuration(String strDuration) {
        String[] arr = strDuration.split(":");
        String strIsoDuration = "PT" + arr[0] + "H" + arr[1] + "M" + arr[2] + "S";
        return Duration.parse(strIsoDuration);
    }

    static String formatDurationJava8Plus(Duration duration) {
        return String.format("%d:%02d:%02d", duration.toHours(), duration.toMinutes() % 60, duration.toSeconds() % 60);

    }

    static String formatDurationJava9Plus(Duration duration) {
        return String.format("%d:%02d:%02d", duration.toHours(), duration.toMinutesPart(), duration.toSecondsPart());
    }
}

输出:

198:00:00
198:00:00

ONLINE DEMO

Trail: Date Time 了解有关现代 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

答案 1 :(得分:0)

我故意离开了println,以便您可以看到代码流。希望这可以帮助你...

public static void main(String[] args) {
        String time[] = { "160:00:00", "24:00:00", "13:50:00", "00:10:00" };
        int hours = 0, minutes = 0, seconds = 0;
        for (String string : time) {
            String temp[] = string.split(":");
            hours = hours + Integer.valueOf(temp[0]);
            minutes = minutes + Integer.valueOf(temp[1]);
            seconds = seconds + Integer.valueOf(temp[2]);
        }
        System.out.println(hours + ":" + minutes + ":" + seconds);
        if (seconds == 60) {
            minutes = minutes + 1;
            seconds = 0;
        } else if (seconds > 59) {
            minutes = minutes + (seconds / 60);
            seconds = seconds % 60;
        }
        System.out.println(hours + ":" + minutes + ":" + seconds);
        if (minutes == 60) {
            hours = hours + 1;
            minutes = 0;
        } else if (minutes > 59) {
            hours = hours + (minutes / 60);
            minutes = minutes % 60;
        }
        System.out.println(hours + ":" + minutes + ":" + seconds);
        String output = "";
        output = String.valueOf(hours);
        output = output.concat(":" + (String.valueOf(minutes).length() == 1 ? "0" + String.valueOf(minutes) : String.valueOf(minutes)));
        output = output.concat(":" + (String.valueOf(seconds).length() == 1 ? "0" + String.valueOf(seconds) : String.valueOf(seconds)));
        System.out.println(output);
}

答案 2 :(得分:0)

我没有测试过,但我很确定它是这样的:

     private static String sumTime(String t1, String t2){
        byte extraMinutes=0;
        byte extraHours=0;

        String arrt1[] = t1.split(":");
        String arrt2[] = t2.split(":");

        int seconds = Integer.valueOf(arrt1[2]) + Integer.valueOf(arrt2[2]);
        if(seconds>=60) {
            extraMinutes = 1;
            seconds = seconds % 60;
        }
        int minutes = Integer.valueOf(arrt1[1]) + Integer.valueOf(arrt2[1]) + extraMinutes;
        if(minutes>=60){
            extraHours = 1;
            minutes = minutes % 60;
        }
        int hours = Integer.valueOf(arrt1[0])  + Integer.valueOf(arrt2[0]) + extraHours;
        if(hours>=24) hours = hours%24;

        return hours+":"+minutes+":"+seconds;
    }