Как я могу рассчитать разницу между двумя разами в 24-часовом формате с использованием Java? - PullRequest
2 голосов
/ 29 ноября 2010

Как рассчитать разницу между двумя значениями в 24-часовом формате с использованием Java?Я загружаю время из файла.Время сохраняется как int с, например: 19 45 06 34 (первые две цифры представляют первый раз, вторые два - второй раз).Как я могу рассчитать разницу между ними и распечатать в формате ??h ??m?Например, приведенное выше время должно показывать 10 ч 49 м.

ОК ... Я действительно новичок, и это задание, я знаю, что это бесполезно.Допустим, у меня есть что-то вроде этого в моем файле:
"SO35 13 56 05 26" - (сначала код чего угодно, и два раза)

Я даже не знаю, какзагрузить его из файла, а затем рассчитать его.Этот код предназначен для определения времени расчета.Внутри файла есть 24 строки, аналогичные той, что я положил здесь.

Ответы [ 6 ]

7 голосов
/ 29 ноября 2010

Использование Время Joda

  • Разделить строку на две
  • Разобрать их, используя DateTimeFormatter (в идеале LocalTime)
  • Получите разницу между ними, используя new Period(from, to, PeriodType.minutes().withHours())
0 голосов
/ 29 ноября 2010

Вам не нужны библиотеки для этого.Просто решите это так, как на бумаге

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

Вы не можете вычесть 34 из 45, потому что 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) {
            }
        }
    }
  }
}

Этот код можно сжать, но я сделал его подробным, чтобы вы понимали, что такоеслучается.

0 голосов
/ 29 ноября 2010

Я предполагаю, что эти два раза время от времени? то есть разница между 7:45 вечера и 6:34 утра следующего дня? Потому что это будет отличаться от 6:34 до 7:45 вечера. (Что-то, что вы должны иметь в виду.) То, что я бы посоветовал вам сделать (если вы не хотите использовать 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

0 голосов
/ 29 ноября 2010

Это так просто, вы можете также преобразовать оба раза в минуты, вычесть разницу и преобразовать в часы / минуты.

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 голосов
/ 29 ноября 2010

Вам, вероятно, следует преобразовать их в объекты Date, вычесть даты (они будут равны «длинным» отсчетам в миллисекундах), а затем преобразовать их обратно в нужный формат.

Будьте осторожны, если вы перекрываете дневные границы - поскольку ваши даты не включают дневные границы, это звучит довольно бесполезно - домашнее задание или что-то в этом роде?

0 голосов
/ 29 ноября 2010

Просто инициализируйте два объекта Date и затем введите значения двух раз. Затем вы можете просто преобразовать это в миллисекунды и вычесть их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...