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

如何使用Java计算24小时格式中两次之间的差异?,java,time,Java,Time,如何使用Java计算24小时格式中两次之间的差异?我正在从文件中加载时间。时间保存为ints,例如:19 45 06 34(前两位代表第一次;后两位代表第二次)。我如何计算它们之间的差异并以?h??m格式打印?例如,上述时间应显示10小时49米 好的。。。我真的是一个初学者,这是一个作业,我知道它没有用。假设我的文件中保存了类似的内容: “SO35 13 56 05 26”-(第一个是任何东西的代码,第二个是) 我甚至不知道如何从文件中加载它,然后计算它。该代码用于选择要计算的时间。在这个文件中

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

好的。。。我真的是一个初学者,这是一个作业,我知道它没有用。假设我的文件中保存了类似的内容:
“SO35 13 56 05 26”-(第一个是任何东西的代码,第二个是)

我甚至不知道如何从文件中加载它,然后计算它。该代码用于选择要计算的时间。在这个文件中,有24行类似于我在这里放的那一行。

使用

  • 把绳子一分为二
  • 使用a解析它们(理想情况下,解析为
    LocalTime
  • 使用
    newperiod(从,到,PeriodType.minutes().withHours())获取它们之间的差异

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

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


如果你跨越一天的界限,要小心,因为你的日期不包括一天的界限。这听起来很没用——家庭作业之类的?

这太简单了,你不妨将两个时间都转换成分钟,减去差值,再转换成小时/分钟

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

我想这两次都是时不时的? i、 e.下午7:45到次日上午6:34之间的差值? 因为那将不同于早上6:34到晚上7:45。 (有些事情你必须记住。) 我建议您(如果您不想使用Joda Time)使用
SimpleDateFormat
类和
Calendar
类。 要获得毫秒的精确差异,可以使用
Date
对象和
getTime
方法。然后你可以除以一小时的毫秒数,再除以一分钟的毫秒数

见:


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

  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) {
            }
        }
    }
  }
}
导入java.io.BufferedReader;
导入java.io.FileReader;
导入java.io.IOException;
导入java.util.Scanner;
公开课考试{
公共静态void main(字符串[]args){
最终字符串filename=“myfile.txt”;
BufferedReader in=null;
试一试{
in=新的BufferedReader(新的文件读取器(文件名));
弦线;
//逐行读取文件
而((line=in.readLine())!=null){
//把这条线分成几段
扫描仪=新扫描仪(行);
scanner.next();//跳过第一位
int hour1=scanner.nextInt();
int min1=scanner.nextInt();
int hour2=scanner.nextInt();
int min2=scanner.nextInt();
int-diffMin;
if(min2

这段代码可以压缩,但我已经把它写得很详细了,这样你就可以理解发生了什么。

是的,我真的很乞讨,所以我不能真正理解你在这里给我写的所有内容……我不能使用它。我不知道如何使用它(Bill K的意思可能是“毫秒”计数。也就是说,每个日期对象在内部存储一个以毫秒为单位的瞬间。我不能让它工作。你能不能再看看我的问题,我确实输入了一些新信息,也许你会知道一些解决方案。谢谢你…即使你不需要任何库,它们也会让生活变得更简单,依我看+1不会被否决这是一个第三方库,我认为如果你必须进行任何类型的日期/时间操作,Joda Time是必不可少的。