2016-05-16 5 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年も経っていません。あなたは、1970年1月1日午前12時からの時間量として解釈される日付に基づいて文字列を作成しています。次に、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

[Javaでhh:mm:ss.SSS形式で経過時間をフォーマットする方法は?](http://stackoverflow.com/questions/6710094/how-to-format-an-elapsed-time-intervalin-in -hhmmss-sss-format-in-java) – shmosel

答えて

1

yy:mm:dd:HH:mm:ssのように時差をフォーマットしています。 diffTimeを出力するとミリ秒が得られ、秒が必要な場合は1000で割ります。

編集:私はあなたが何をしようとしているかを見ていると思いますが、あなたは日付としてフォーマットすることができない時間間隔を扱っています。時間を秒、分、時間などで表示するために独自の書式を使用するか、外部ライブラリを使用する必要があります。

0

getTime返されるミリ秒数は1.1.1970から... SimpleDateFormatは数値を日付に変換してからそれをフォーマットします。これは、diffTime = 0のときにSimpleDateFormatが日付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を使います。

関連する問題