2016-07-09 4 views
1

Я пытаюсь вычислить разницу между 2 раз. Это работает хорошо, если только две даты не находятся с каждой стороны полуночи. В этом случае я получаю отрицательный ответ. Любые идеи, как я могу улучшить код, чтобы исправить эту проблему?Расчет разницы во времени между 2 днями android

String sleepStart = editFallAsleepTime.getText().toString(); 
       String sleepStop = editWakeUpTime.getText().toString(); 
       String awakeTimeString = ((Globals) getActivity().getApplication()).getAwakeTime(); 

//HH converts hour in 24 hours format (0-23), day calculation 
       SimpleDateFormat format = new SimpleDateFormat("HH:mm"); 

       Date d1 = null; 
       Date d2 = null; 

       try 
      { 
       d1 = format.parse(sleepStart); 
       d2 = format.parse(sleepStop); 

       float t1 = d1.getTime(); 
       float t2 = d2.getTime(); 

       if(t2 <= t1){ 
        t2 +=24; 
       } 

       float diff = t2 - t1; 

       //in milliseconds 
        float diff = d2.getTime() - d1.getTime(); 
        float diffHours = diff/(60 * 60 * 1000); 
        float awakeTime = Float.valueOf(awakeTimeString); 
        float awakeHours = awakeTime/60; 
        float calcEffectiveSleep = diffHours - awakeHours; 
        String sleepTime = Float.toString(diffHours); 
        String effectiveSleep = Float.toString(calcEffectiveSleep); 
        ((Globals) getActivity().getApplication()).setEffectiveSleep(effectiveSleep); 
       } 
       catch (Exception e) 
       { 
        Log.e("timediff","didntwork"); 
       } 
+0

Посмотрите на ответы здесь: http://stackoverflow.com/questions/1555262/calculating-the-difference-between-two-java-date-instances – alzee

+0

Вы работаете только с время. Итак, вы принимаете оба раза в один день? И ваша проблема возникает только в том случае, если end

+0

Нет, я не предполагаю, что оба раза в тот же день. Я должен предположить, что это не так, если в первый раз до 23.59. Должен ли я поставить дату там как-то? –

ответ

1

Если разница в возрасте до 1 суточного интервала, то вы можете рассмотреть обработку Д2 < d1 случая, как сказали @Andre Classen. Как сделать:

t1 = d1.getTime(); 
t2 = d2.getTime(); 

if(t2 <= t1){ 
    t2 +=24*60*60*1000; 
} 

diff = t2 - t1; 
+0

Пробовал это сейчас, но это не сработало. Может, я поместил это неправильно? Я согласен, что это должно быть решение, возможно, я просто ошибся. Отредактировал мой код выше, чтобы показать, как я его реализовал. –

+0

вы редактировали и смешивали все. что такое формат 2, время сна, getUptime, d3, d4 и где вы печатаете diff2? это не ясно в отредактированном коде. лучше, если вы поместите какую ошибку вы получите или какие значения вы попытались и какой результат вы получите. – uguboz

+0

Извините, я скопировал неправильную часть и вставил ее, не глядя. Это прямо сейчас. Я делаю это для нескольких разных чисел, вот почему я ошибся. Должно быть прямо сейчас. Я думаю, что я немного устал. –

Смежные вопросы