2010-11-29 3 views
2

Java를 사용하여 24 시간 형식의 두 시간 차이를 어떻게 계산합니까? 파일에서 시간을로드하고 있습니다. 시간은 int으로 저장됩니다 (예 : 19 45 06 34). 첫 번째 두 자리는 첫 번째 시간을 나타내며 두 ​​번째 두 번째 시간은 두 번째 시간을 나타냅니다. 어떻게 차이를 계산하여 ??h ??m 형식으로 인쇄 할 수 있습니까? 예를 들어 위의 시간은 10 시간 49 분으로 표시됩니다.Java를 사용하여 24 시간 형식으로 두 번 차이를 어떻게 계산합니까?

OK ... 저는 정말 초보자이며이 과제는 유용하지 않습니다. 이제 내 파일에 저장이 같은 있다고 가정 해 봅시다 :
"SO35 13 56 05 26"—

심지어에서로드하는 방법을 모른다 (먼저 무엇이든, 두 배의 코드) 파일을 계산 한 다음 계산하십시오. 이 코드는 계산할 시간을 선택하는 데 사용됩니다. 파일 안에는 내가 여기 넣은 것과 비슷한 24 개의 줄이 있습니다.

답변

7

사용 Joda Time

  • 분할이
  • 에 최대 문자열
  • (이상적으로 LocalTime로)는 DateTimeFormatter 그냥 초기화 new Period(from, to, PeriodType.minutes().withHours())
+0

@Downvoter : 관심있는 댓글? –

+0

+1 downvote를 얻지 마십시오. 제 3 자 라이브러리이지만 Joda Time은 날짜/시간 조작을해야하는 경우 필수적이라고 생각합니다. – helpermethod

0

를 사용하여 그들 사이의 차이를 가져옵니다 사용하여 구문 분석 두 개의 Date 객체를 만들고 두 번의 값을 입력하십시오. 그러면 밀리 초 형식으로 변환하고 빼기 만하면됩니다.

0

아마 Date 객체로 변환하고 날짜를 뺍니다 ("Long"밀리 초 수와 같음). 그런 다음 다시 원하는 형식으로 변환하십시오.

날짜 경계를 초과하지 않도록 조심하십시오. 날짜에 일 경계선이 없으므로 숙제가 필요하지 않습니까?

+0

예 과제와 저는 정말 초보자입니다. 그래서 저는 당신이 저에게 여기 쓰는 모든 것을 이해하지 못합니다 ... 나는 그것을 사용할 수 없습니다. 어떻게 사용하는지 모르겠습니다. : –

+1

Bill K는 아마도 "밀리 초"를 의미합니다. 즉, 각 Date 객체는 내부적으로 시간을 밀리 초 단위로 저장합니다. – Avrom

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

나는이 두 시간이 때때로 발생한다고 추정하고 있습니까? 즉 다음 날 오후 7시 45 분에서 6시 34 분 사이의 차이가 있습니까? 오전 6시 34 분 ~ 오후 7시 45 분과 다를 수 있습니다. (당신이 염두에 두어야 할 것이 있습니다.) (내가 Joda Time을 사용하고 싶지 않다면) SimpleDateFormat 클래스와 Calendar 클래스를 사용하는 것이 좋습니다. 정확한 차이를 얻으려면 밀리 초Date 개체와 getTime 메서드를 사용합니다. 그런 다음 한 시간에 밀리 초 수로 나눈 다음 1 분에 밀리 초 수로 나눌 수 있습니다.

은 참조 :

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

0

당신은이 작업을 수행 할 수있는 라이브러리가 필요하지 않습니다.당신이 종이

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

에서와 (34)보다 작은 45이기 때문에 45에서 34를 뺄 수없는 것처럼 당신이 "빌려"시간에서 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) { 
      } 
     } 
    } 
    } 
} 

이 코드는 압축 할 수 있지만, 당신은 무슨 일이 일어나고 있는지 이해할 수 있도록 내가 자세한 그것을 만든 : 여기

코드의 모습 것입니다.

+0

다시 문제를 볼 수는 없습니까? 몇 가지 새로운 정보, 어쩌면 당신은 약간의 해결책을 알게 될 것입니다. 감사합니다 ... –

+1

당신이 * 모든 도서관을 필요로하지 않더라도, 그들은 지옥이 삶을 더 단순하게 만든다고 확신합니다. –

관련 문제