2016-05-16 3 views
1

Я хочу рассчитать общее время работы моей программы от начала до конца и обновить время работы в JFrame, но когда я запускаю свою программу, я получаю избыток 70 лет, 1 день и 2 часа. Зачем ? Что не так ?Как исправить подсчет времени работы

private void setMachineTime(){ 
    Timer timer = new Timer(); 
    long startTime = new Date().getTime(); 
    timer.scheduleAtFixedRate(new TimerTask() { 
     @Override 
     public void run() { 
      long endTime = new Date().getTime(); 
      long diffTime = endTime - startTime ; 
      String time = new SimpleDateFormat("yy:mm:dd:HH:mm:ss").format(diffTime); 
      System.out.println(time); 
     } 
    }, 0, 1000); 
} 

actual result

UPD: я переписал код с моим собственным методом времени формата. Теперь я получил то, что хочу. Всем спасибо.

private void setMachineTime(){ 
    Timer timer = new Timer(); 
    long startTime = new Date().getTime(); 
    timer.scheduleAtFixedRate(new TimerTask() { 
     @Override 
     public void run() { 

      long endTime = new Date().getTime(); 
      long diffTime = endTime - startTime; 
      String diffSeconds = formatTime(diffTime/1000 % 60); 
      String diffMinutes = formatTime(diffTime/(60 * 1000) % 60); 
      String diffHours = formatTime(diffTime/(60 * 60 * 1000) % 24); 
      System.out.println(diffHours + ":" + diffMinutes + ":" + diffSeconds); 
     } 
    }, 0, 1000); 
} 

private String formatTime(long diff){ 
    long t; 
    t = diff; 
    if(t < 10){ 
     return String.valueOf("0"+t); 
    } else { 
     return String.valueOf(t); 
    } 
} 
+0

Вы не получаете 70 лет. Вы делаете строку на основе даты, которая интерпретируется как количество времени с 12:00 AM 1 января 1970 года. Затем вы печатаете год, который составляет 1970 год, или «70». Посмотрите, что произойдет, если вы попробуете 'String time = new SimpleDateFormat (« yy: mm: dd: HH: mm: ss »). Format (0);' - он скажет, что это точная дата. Также проверьте http://stackoverflow.com/questions/17940200/how-to-find-the-duration-of-difference-between-two-dates-in-java – childofsoong

+0

На самом деле, теперь, когда я думаю об этом, это, вероятно, не указывая точную дату, а вместо этого настройте свой часовой пояс. Тем не менее, общий принцип. – childofsoong

+0

[Как отформатировать прошедший интервал времени в формате hh: mm: ss.SSS в Java?] (Http://stackoverflow.com/questions/6710094/how-to-format-an-elapsed-time-interval-in -hhmmss-SSS-формат-в-Java) – shmosel

ответ

1

Вы форматируете разницу во времени как yy: mm: dd: HH: mm: ss. Просто распечатка diffTime даст вам миллисекунды, разделите их на 1000, если вам понадобятся секунды.

EDIT: Я думаю, что вижу то, что вы пытаетесь сделать, но вы имеете дело с интервалом времени, который не может быть отформатирован как дата. Вам нужно перевернуть свое собственное форматирование для отображения времени в виде секунд, минут, часов и т. Д. Или использовать внешнюю библиотеку.

0

getTime возвращает число миллисекунд от 1.1.1970 ... и такое же, что и для преобразования числа SimpleDateFormat на сегодняшний день (и затем его формирования). Это означает, что когда ваш diffTime = 0, SimpleDateFormat попытается отформатировать Date 1.1.1970 0:00:00, а с вашей строкой формирования будет 70: 01: 01: 00: 00: 00. Вместо этого попробуйте использовать http://joda-time.sourceforge.net/api-release/org/joda/time/Interval.html.

И, кстати, ваша формообразующая строка в любом случае ошибочна ... вы используете mm, где я вам нужен месяц ... но мм - минуты.