2015-12-02 1 views
0

Мне очень жаль, если я задам глупый вопрос здесь, но я действительно понятия не имею, чтобы решить :(Попадая неправильно общее количество часов

В моем приложении, я хочу, чтобы вычислить общее количество часов, и, наконец, показать на textView. Я установил различные условия в случае, если время начала больше чем конечное время.

 int a = SplitTime(objMyCustomBaseAdapter.getFistTime()); 
    int b = SplitTime(objMyCustomBaseAdapter.getLastTime()); 
    long difference = 0; 
    if (a > b) 
    { 
     difference = b + 24 - a; 
     Log.e("Tag",difference+""); 
     int minutes = (int) ((difference/(1000 * 60)) % 60); 
     int hours = (int) ((difference/(1000 * 60 * 60)) % 24); 
     totalHours.setText((hours + ":" + minutes)); 
     } 
     else 
     { 
      difference=b-a; 
      int minutes = (int) ((difference/(1000 * 60)) % 60); 
      int hours = (int) ((difference/(1000 * 60 * 60)) % 24); 
      totalHours.setText((hours + ":" + minutes)); 
     } 

    public static int SplitTime(String time) { 
     try { 
       String[] altSplitTime = time.split(":", 3); 
       return Integer.valueOf(altSplitTime[1].trim()) * 60 + Integer.valueOf(altSplitTime[2].trim()); 
      } 
     catch (Exception ex) 
      { 
      return 0; 
      } 

} 

Пусть int a держит 550, b держит 71, и разница имеет 503. После этого я хочу, чтобы преобразовать его в hours и minutes, наконец, отобразится на textView. Но я получаю 0:0 на textView.

Что здесь не так? Я ошибался? Может ли кто-нибудь дать мне предложения о том, как это решить? Оценил.

ответ

0

изменить это.

int minutes = (int) (difference % 60); 
     int hours = (int) (difference /60 % 24); 
+0

Спасибо .. это значение отображения на textView сейчас. Могу ли я спросить вас о чем-то, что не связано с программированием? Если 'time in' равно 9 утрам, и он работает до 1 утра, правильно ли предоставлен мой формат? –

+0

Я не понимаю правильно, вы хотите рассчитать, сколько часов он на работе? –

+0

Yup. Предположим, что он работает с 9 утра до 1 часа ночи, какой формат я должен написать? Если он работает с 9 утра до 6 вечера, не будет никаких проблем, поскольку я могу получить от b-a –

0

Я бы предположил, что это проблема с вашим литьем. Это означает, что вы звоните в минуты и часы int, но они могут возвращать длинные, удвоенные или поплавки.

Попробуйте изменить часы и минуты на двойной, длинный или поплавок. Затем преобразование его в целое число позже путем округления или кастинга.

double minutes = ((difference/(1000 * 60)) % 60); 
double hours = ((difference/(1000 * 60 * 60)) % 24); 
//print the values here to your log to ensure they hold a value 
Log.v("TIME", "minutes: " + minutes); 
Log.v("TIME", "hours: " + hours); 
//convert to int here, by rounding or casting. 
totalHours.setText((hours + ":" + minutes)); 
+0

не повезло. Я получаю 'V/TIME: минуты: 0.0',' V/TIME: hours: 0.0. Интересно, мне нужно добавить 'SimpleDateFormat format = new SimpleDateFormat (" HH: mm ");'? –