2017-08-15 4 views
-1

Le programme ne donne pas d'erreur mais mes codes ne fonctionnent pas correctement. Quand je soustrais entre les chiffres de l'horloge, ça fait faux.Pourquoi la soustraction donne-t-elle le mauvais résultat entre les nombres d'horloge?

Par exemple, Lorsque je soustrais entre 15h00 et 18h00, il en résulte 12h00 au lieu de 3h00.

EDIT: J'ai trouvé un nouveau bug. Quand je compare n'importe quelle heure avec 15:00, le résultat est 12 à chaque fois. Le problème peut être dans d'autres choses. (Par exemple, 15: 00-16: 00 = 12 ou 15: 00-19: 00 = 12)

(En outre, j'utilise une bibliothèque de GitHub pour l'horloge.)

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

* J'utilise une bibliothèque de GitHub pour l'horloge. * Qu'est-ce que l'horloge? Et savez-vous combien de bibliothèques il y a sur GitHub? – shmosel

+0

Je ne savais pas s'il était important de le dire. J'utilise ceci: https://github.com/DuanTzXavier/conciseclock @shmosel –

+0

Vous utilisez 'Date' et' SimpleDateFormat' Vous devez simplement trier votre logique pour calculer les heures et les minutes en * x * nombre de millisecondes comme contenu dans 'différence' –

Répondre

0

Il semble que a est votre heure de départ et b est votre heure de fin.

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

Cependant, lorsque vous prenez une différence que vous soustrayez b de a. C'est en arrière.

difference = a-b; //Oops! 

Si vous voulez le temps écoulé, vous devez soustraire a de b à la place.

difference = b - a; 
+0

Non, ça ne marche pas. Quand j'essaie 15:00 - 18:00 = -14: 00, le résultat est -14 comme vous le voyez. –

0

ce code à l'aide Tenir compte TimeUnit à la conversion

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); 

sortie

03:05

+0

'else { isAddMessage = true; différence = a-b; longues heures = TimeUnit.MILLISECONDS.toHours (différence); long ms = TimeUnit.HOURS.toMillis (heures); différence - = ms; longues minutes = TimeUnit.MILLISECONDS.toMinutes (différence); text.setText ((heures + ":" + minutes)); } ' J'ai édité comme ceci et le résultat a changé mais il n'est toujours pas correct. Il montre maintenant 13h00 (entre 15h00-18h00) (ancien résultat est 12:00) –

+0

Je vous suggère d'imprimer vos dates de début et de fin et aussi votre différence –

+0

'finishing = format.parse (startTime); '- ce type de codage ne peut que conduire à la confusion –