[英]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.