簡體   English   中英

如何使用Java以24h格式計算兩次之間的差?

[英]How can I calculate the difference between two times in 24h format using Java?

如何使用Java以24h格式計算兩次之間的差? 我正在從文件中加載時間。 時間被保存為int ,例如:19 45 06 34(前兩位數字代表第一次;后兩位數字代表第二次)。 如何計算它們之間的差異並以??h ??m格式打印? 例如,上面的時間應該顯示10h 49m。

好吧...我真的是一個初學者,這是一項作業,我知道它沒有用。 假設我的文件中保存了以下內容:
“ SO35 13 56 05 26”-(第一個是任意代碼,兩次都是)

我什至不知道如何從文件中加載它然后進行計算。 該代碼用於獲取計算時間。 在文件中,有24行類似於我在此處輸入的行。

使用喬達時間

  • 將字符串分成兩部分
  • 使用DateTimeFormatter解析它們(理想情況下解析為LocalTime
  • 使用new Period(from, to, PeriodType.minutes().withHours())獲得它們之間的差異

只需初始化兩個Date對象,然后輸入兩次的值即可。 然后,您可以將其轉換為毫秒格式,然后減去它們。

您可能應該將它們轉換為Date對象,減去日期(它們將等於“長”毫秒數),然后將其轉換回所需的格式。

如果您跨越日期界限,請當心-因為您的日期不包括日期界限,這聽起來很無用-家庭作業或其他東西?

這很簡單,您也可以將兩個時間都轉換為分鍾,減去差然后轉換為小時/分鍾。

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

我想這兩次是不時的? 也就是說,第二天的7:45 pm與第二天的6:34 am之間的時差? 因為那將不同於上午6:34到7:45 pm。 (有些事情要牢記。)我建議您(如果您不想使用Joda Time)要做的是看一下使用SimpleDateFormat類和Calendar類。 要獲得精確的毫秒數差異,請使用Date對象和getTime方法。 然后,您可以將一小時內的毫秒數除以一分鍾中的千毫秒數。

看到:

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

您不需要任何庫即可執行此操作。 就像在紙上一樣解決它

  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) {
            }
        }
    }
  }
}

該代碼可以壓縮,但是我使其變得冗長,以使您了解正在發生的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM