2017-08-15 11 views
-1

プログラムにエラーはありませんが、コードが正しく動作しません。私が時計の数字の間を引くと、それは間違っています。減算がクロック数の間に間違った結果をもたらすのはなぜですか?

たとえば、 15:00から18:00の間を差し引くと、結果は3:00ではなく12:00になります。

EDIT:新しいバグを発見しました。 15:00といつでも比較すると、結果は毎回12です。問題は他にもあるかもしれません。 (のインスタンス、15:00-16:00 = 12または15:00-19:00 = 12)

(また、私はクロックのためのGitHubからのライブラリを使用する。)

private String startTime = ""; 
@Bind(R.id.circle_seek_bar) 
CircleSeekBar mSeekBar; 
List<Item> messages = new ArrayList<>(); 
private Date finishing, starting; 
private long difference, a, b; 
SimpleDateFormat format = new SimpleDateFormat("HH:mm"); 


public void restart() { 
    mSeekBar.setIsSetStart(false); 
if (isAddMessage) { 
     messages.add(new Item(startTime, 
       mSeekBar.getCurrent())); 
     startTime = mSeekBar.getCurrent(); 
     try { 
      finishing = format.parse(startTime); 
      b = finishing.getTime(); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
     isAddMessage = false; 

    } else { 
     if (isFirst) { 

      mSeekBar.initInvaildStartAngle(); 
      isFirst = false; 
      startTime = mSeekBar.getCurrent(); 
      try { 
       starting =format.parse((mSeekBar.getCurrent())); 
       a = starting.getTime(); 
      } catch (ParseException e) { 
       e.printStackTrace(); 
      } 

     } else { 
      isAddMessage = true; 
      difference = a-b; 
      int minutes = (int) ((difference/(1000 * 60)) % 60); 
      int hours = (int) ((difference/(1000 * 60 * 60)) % 24) - 1; 
      text.setText((hours + ":" + minutes)); 
      // text.setText(Integer.toString((int) difference)); 
     } 
+1

TimeUnitを使用してこのコードを考えてみましょう。*どのようなクロック? GitHubにはいくつのライブラリがあるのか​​知っていますか? – shmosel

+0

それを伝えることが重要かどうかは分かりませんでした。私はこれを使用します:https://github.com/DuanTzXavier/conciseclock @shmosel –

+0

あなたは 'Date'と' SimpleDateFormat'を使用しています* x *ミリ秒の時間と分を計算するためのロジックを単純に並べ替える必要があります。 「差分」に含まれる –

答えて

0

あなたの開始時刻はa、終了時刻はbのようです。しかし

b = finishing.getTime(); 
... 
a = starting.getTime(); 

あなたがaからbを引くの違いを取ります。これは後方です。あなたは時間が経過する場合

difference = a-b; //Oops! 

、あなたの代わりにbからaを引く必要があります。私は時計のためのGitHubからライブラリを使用*

difference = b - a; 
+0

いいえ、それは動作しません。 15:00 - 18:00 = -14:00を試してみると、結果は-14です。 –

0

は変換

Calendar now = Calendar.getInstance(); 
    Calendar before = Calendar.getInstance(); 
    before.add(Calendar.HOUR, -3); 
    before.add(Calendar.MINUTE, -5); 

    System.out.println(now.getTime().getTime()); 
    System.out.println(before.getTime().getTime()); 

    long diff = now.getTime().getTime() - before.getTime().getTime(); 
    System.out.println(diff); 

    // Use TimeUnit to do the heavy lifting 
    long hours = TimeUnit.MILLISECONDS.toHours(diff); 
    long ms = TimeUnit.HOURS.toMillis(hours); 

    System.out.println(ms); 
    diff -= ms; 
    long min = TimeUnit.MILLISECONDS.toMinutes(diff); 

    System.out.printf("%02d:%02d", hours, min); 

出力

03:05

+0

'else { isAddMessage = true; 差= a-b; long hours = TimeUnit.MILLISECONDS.toHours(difference); long ms = TimeUnit.HOURS.toMillis(hours); 差 - = ms; long minutes = TimeUnit.MILLISECONDS.toMinutes(difference); text.setText((時間+ ":" +分)); } ' 私はこのように編集しましたが、結果は変更されましたが、それでも正しくありません。現在は13:00(15:00-18:00の間)です(古い結果は12:00です) –

+0

あなたの開始日と終了日、またその差異を印刷することをお勧めします。 –

+0

'finish = format.parse(startTime); ' - このタイプのコーディングは、混乱の原因となるだけです –

関連する問題