如何使用Java以24小时格式计算两次之间的差异?

时间:2010-11-29 18:18:05

标签: java time

如何使用Java以24小时格式计算两次之间的差异?我正在从文件中加载时间。时间保存为int s,例如:19 45 06 34(前两位代表第一次;后两位代表第二次)。如何计算它们之间的差异并以??h ??m格式打印?例如,上面的时间应显示10h 49m。

好的......我真的是初学者,这是一项任务,我知道它没用。假设我的文件中保存了这样的内容:
“SO35 13 56 05 26” - (首先是代码,两次代码)

我甚至不知道如何从文件加载它然后计算它。该代码用于获取计算的时间。在文件内部,有24行类似于我放在这里的行。

6 个答案:

答案 0 :(得分:7)

使用Joda Time

  • 将字符串拆分为两个
  • 使用DateTimeFormatter(理想情况下为LocalTime
  • 解析它们
  • 使用new Period(from, to, PeriodType.minutes().withHours())
  • 获取它们之间的差异

答案 1 :(得分:0)

只需初始化两个Date对象,然后输入两次的值。 然后你可以将它转换为毫秒格式并减去它们。

答案 2 :(得分:0)

您应该将它们转换为Date对象,减去日期(它们将等于“Long”毫秒计数),然后将其转换回您想要的格式。

如果你跨越日界,要小心 - 因为你的日期不包括日界,这听起来很无用 - 家庭作业或其他什么?

答案 3 :(得分:0)

这很简单,您可以将两次转换为分钟,减去差异并转换为小时/分钟。

Scanner s
int diff = Math.abs(s.nextInt()*60 + s.nextInt() - s.nextInt()*60 - s.nextInt());
System.out.println(diff / 60 + "h " + diff % 60 + "m");

答案 4 :(得分:0)

我认为这两次都是时不时的? 即第二天下午7:45至6:34之间的差异? 因为那不同于早上6:34到晚上7:45。 (你必须要记住的事情。) 我建议你做的事情(如果你不想使用Joda Time)是使用SimpleDateFormat类和Calendar类。 要获得毫秒的确切差异,请使用Date对象和getTime方法。然后,你可以用一小时内的毫秒数除以一分钟内的millesecs数。

请参阅:

http://download.oracle.com/javase/6/docs/api/java/util/Calendar.html

http://download.oracle.com/javase/6/docs/api/java/util/Date.html

http://download.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

答案 5 :(得分:0)

您不需要任何库来执行此操作。就像你在纸上一样解决它

  HH MM
  06 34
- 19 45
--------
  10 49

你不能从45减去34,因为34小于45,所以你从小时“借”60分钟。最终得到(60 + 34)-45 = 49,小时数从6减少到5.由于5小于19,我们假设我们已经进入第二天,因此小时数差异为5+ (24-19)= 10。

以下是代码的样子:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;

public class Test {

  public static void main(String[] args) {

    final String filename = "myfile.txt";
    BufferedReader in = null;
    try {
        in = new BufferedReader(new FileReader(filename));
        String line;

        //read the file, line-by-line
        while ((line = in.readLine()) != null) {

            //break the line into various pieces
            Scanner scanner = new Scanner(line);
            scanner.next(); //skip the first bit
            int hour1 = scanner.nextInt();
            int min1 = scanner.nextInt();
            int hour2 = scanner.nextInt();
            int min2 = scanner.nextInt();

            int diffMin;
            if (min2 < min1) {
                // borrow 60mins from the hours
                diffMin = 60 + min2 - min1;
                if (hour2 == 0) {
                    hour2 = 23;
                } else {
                    hour2--;
                }
            } else {
                diffMin = min2 - min1;
            }

            int diffHour;
            if (hour2 < hour1) {
                diffHour = hour2 + 24 - hour1;
            } else {
                diffHour = hour2 - hour1;
            }
            System.out.printf("%sh %sm\n", diffHour, diffMin);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (in != null) {
            try {
                in.close();
            } catch (IOException e) {
            }
        }
    }
  }
}

这段代码可能会被压缩,但我已经将它变得冗长,以便您了解正在发生的事情。