Нахождение затраченого времени по времени начала и конца, неправильные данные на выводе

Рейтинг: 0Ответов: 1Опубликовано: 27.03.2015

Задача заключается в том, чтобы при известном дне, часе, минуте и секунде вычислить затраченое время и вывести ответ в формате (д ч м с). Я попытался вычислить время в миллисекундах и присвоить значение переменной типа лонг потом поставив это значение в качестве аргумента конструктора класса Date библиотеки java.util.Date вывести необходимое значение. Но, к сожалению, выходные данные очень далеки от ожидаемых.

import java.io.File;
import java.io.FileNotFoundException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class ModuloAndTimeDifference {
    public static void main(String[] args) throws FileNotFoundException {
        File text = new File("C:\\Users\\Andrew\\IdeaProjects\\ModuloAndTimeDifference\\src\\ModuloAndTimeDifference.txt");
        Scanner scanner = new Scanner(text);
        scanner.nextLine();
        while (scanner.hasNextLine()){
            long result = (((-1000) * ((scanner.nextLong() * 24 * 60 * 60) + (scanner.nextLong() * 60 * 60) + (scanner.nextLong() * 60) + (scanner.nextLong()))) + (1000 * ((scanner.nextLong() * 24 * 60 * 60) + (scanner.nextLong() * 60 * 60) + (scanner.nextLong() * 60) + scanner.nextLong())));
            DateFormat Timestamp = new SimpleDateFormat("d h m s");
            System.out.print("(" + Timestamp.format(new Date(result))+ ") ");

        }
    }
}

Скажите, что пошло не так. Конечно, можно было бы вручную задать подсчет и банальные инты на вывод кинуть, но для меня приоритетная цель научиться "кодить". Поэтому я стараюсь творчески подходить к выполнению заданий. ) Заранее спасибо.

Ответы

▲ 1Принят

Конструктор new Date(long date) принимает параметром не абстрактные миллисекунды, а количество миллисекунд, прошедших с 1 января 1970 г. 00:00:00 GMT.

Так для интервала в 1 секунду в вашем файле, ваша формула выдаст 1000 миллисекунд. Это будет соответствовать дате 1 января 1970 г 00:00:01 GMT. SimpleDateFormat переведет это в вашу тайм-зону, что для московского времени даст на выходе что-то вроде: 31 21 50 1.

P.S. Время, на мой взгляд, это один самых сложных типов данных. И в этой области лучше не городить велосипеды, а пользоваться существующими решениями. Посмотрите библиотеку JodaTime и новый Java 8 Time API.