2017-04-27 5 views
1

Ich habe diesen Code für die Berechnung von Monat und Zeitunterschied, aber dieser Code gibt falsche Ausgabe seine Berechnung 3 Monate sogar tatsächliche Monatsunterschied ist 1, wenn ich diesen Code und im gleichen Fall bitte helfe, wo ist das Problem in diesem Code. ...Monat und Zeitdifferenz in Java berechnen?

public static void updateLinkDownTimeDate(ObjectId TimeDateId, TimeDatePojo TimeDatePojo) { 
      try { 
       List<DBObject> array = new ArrayList<>(); 
       BasicDBObject match = new BasicDBObject(); 
       match.put("_id", TimeDateId); 
       DBCollection collection = new MongoSetup().getDBCollection("TimeDate"); 
       DBObject obj = TimeDatePojo.bsomFromPojo(); 
       String newId = (String) obj.get("linkId"); 
       SimpleDateFormat dates = new SimpleDateFormat("dd-MM-yyyy"); 
       String startDate = dates.format(obj.get("startDate")); 
       String endDate = dates.format(obj.get("endDate")); 
       Date SD = dates.parse(startDate); 
       Date ED = dates.parse(endDate); 
       Calendar cal = Calendar.getInstance(); 
       cal.setTime(SD); 
       int month = cal.get(Calendar.MONTH); 
       int year = cal.get(Calendar.YEAR); 

       String startTime = (String) obj.get("startTime"); //present start time 
       SimpleDateFormat forms = new SimpleDateFormat("dd-MM-yyyy"); 
       SimpleDateFormat form = new SimpleDateFormat("HH:mm:ss"); 
       Calendar currentStartDateCalendar = Calendar.getInstance(); 
       currentStartDateCalendar.setTime(SD); 
       int currentSDate = currentStartDateCalendar.get(Calendar.DATE); 
       int currentStartMonth = currentStartDateCalendar.get(Calendar.MONTH); 
       int currentStartYear = currentStartDateCalendar.get(Calendar.YEAR); 
       Date STs = form.parse(startTime); 
       Calendar presentStartTime = Calendar.getInstance(); 
       presentStartTime.setTime(STs); 
       int currentHour = presentStartTime.get(Calendar.HOUR); 
       int currentMin = presentStartTime.get(Calendar.MINUTE); 
       int currentSec = presentStartTime.get(Calendar.SECOND); 
       currentStartDateCalendar.set(currentStartYear, currentStartMonth, currentSDate, currentHour, currentMin, currentSec); 
       Date PSDate = currentStartDateCalendar.getTime(); 

       String endTime = (String) obj.get("endTime"); //present end time 
       Date ETs = form.parse(endTime); 
       Calendar currentEndDateCalender = Calendar.getInstance(); 
       currentEndDateCalender.setTime(ED); 
       int currentEDate = currentEndDateCalender.get(Calendar.DATE); 
       int currentEndMonth = currentEndDateCalender.get(Calendar.MONTH); 
       int currentEYear = currentEndDateCalender.get(Calendar.YEAR); 
       Calendar presentEndTime = Calendar.getInstance(); 
       presentEndTime.setTime(ETs); 
       int currentEndHour = presentEndTime.get(Calendar.HOUR); 
       int currentEndMin = presentEndTime.get(Calendar.MINUTE); 
       int currentEndSec = presentEndTime.get(Calendar.SECOND); 
       currentEndDateCalender.set(currentEYear, currentEndMonth, currentEDate, currentEndHour, currentEndMin, currentEndSec); 
       Date PEDate = currentEndDateCalender.getTime(); 
       BasicDBObject getSavedDate = new BasicDBObject(); 
       getSavedDate.append("_id", linkDownTimeDateId); 
       getSavedDate.append("linkId", newId); 
       DBObject seeSaved = collection.findOne(getSavedDate); 
       Date savedSDate = (Date) seeSaved.get("startDate"); 
       Date savedEDate = (Date) seeSaved.get("endDate"); 
       String savedStartTime = (String) seeSaved.get("startTime"); 
       String savedEndTime = (String) seeSaved.get("endTime"); 
       Date SSD = null; 
       Date SED = null; 
       if (savedSDate.compareTo(SD) == 0 && savedEDate.compareTo(ED) == 0) { 
        Calendar saveStartTimeCalendar = Calendar.getInstance(); 
        saveStartTimeCalendar.setTime(savedSDate); 
        int savedYear = saveStartTimeCalendar.get(Calendar.YEAR); 
        int savedMonth = saveStartTimeCalendar.get(Calendar.MONTH); 
        int savedDate = saveStartTimeCalendar.get(Calendar.DATE); 
        Date SSTs = form.parse(savedStartTime); 
        Calendar savedStartTimeCal = Calendar.getInstance(); 
        savedStartTimeCal.setTime(SSTs); 
        int hour = savedStartTimeCal.get(Calendar.HOUR); 
        int mins = savedStartTimeCal.get(Calendar.MINUTE); 
        int secs = savedStartTimeCal.get(Calendar.SECOND); 
        saveStartTimeCalendar.set(savedYear, savedMonth, savedDate, hour, mins, secs); 
        SSD = saveStartTimeCalendar.getTime(); 
        Calendar saveEndTimeCalendar = Calendar.getInstance(); 
        saveStartTimeCalendar.setTime(savedEDate); 
        int savedEndYear = saveEndTimeCalendar.get(Calendar.YEAR); 
        int savedEndMonth = saveEndTimeCalendar.get(Calendar.MONTH); 
        int savedEndDates = saveEndTimeCalendar.get(Calendar.DATE); 
        Date ESTs = form.parse(savedEndTime); 
        Calendar savedEndTimeCal = Calendar.getInstance(); 
        savedEndTimeCal.setTime(ESTs); 
        int endhour = savedStartTimeCal.get(Calendar.HOUR); 
        int endmins = savedStartTimeCal.get(Calendar.MINUTE); 
        int endsecs = savedStartTimeCal.get(Calendar.SECOND); 
        saveEndTimeCalendar.set(savedEndYear, savedEndMonth, savedEndDates, endhour, endmins, endsecs); 
        SED = saveEndTimeCalendar.getTime(); 
       } else if (savedSDate.compareTo(SD) == -1 || savedEDate.compareTo(ED) == -1) { 
        Calendar saveStartTimeCalendar = Calendar.getInstance(); 
        saveStartTimeCalendar.setTime(SD); 
        int savedYear = saveStartTimeCalendar.get(Calendar.YEAR); 
        int savedMonth = saveStartTimeCalendar.get(Calendar.MONTH); 
        int savedDate = saveStartTimeCalendar.get(Calendar.DATE); 
        Date SSTs = form.parse(savedStartTime); 
        Calendar savedStartTimeCal = Calendar.getInstance(); 
        savedStartTimeCal.setTime(SSTs); 
        int hour = savedStartTimeCal.get(Calendar.HOUR); 
        int mins = savedStartTimeCal.get(Calendar.MINUTE); 
        int secs = savedStartTimeCal.get(Calendar.SECOND); 
        saveStartTimeCalendar.set(savedYear, savedMonth, savedDate, hour, mins, secs); 
        SSD = saveStartTimeCalendar.getTime(); 
        Calendar saveEndTimeCalendar = Calendar.getInstance(); 
        saveStartTimeCalendar.setTime(ED); 
        int savedEndYear = saveEndTimeCalendar.get(Calendar.YEAR); 
        int savedEndMonth = saveEndTimeCalendar.get(Calendar.MONTH); 
        int savedEndDates = saveEndTimeCalendar.get(Calendar.DATE); 
        Date ESTs = form.parse(savedEndTime); 
        Calendar savedEndTimeCal = Calendar.getInstance(); 
        savedEndTimeCal.setTime(ESTs); 
        int endhour = savedStartTimeCal.get(Calendar.HOUR); 
        int endmins = savedStartTimeCal.get(Calendar.MINUTE); 
        int endsecs = savedStartTimeCal.get(Calendar.SECOND); 
        saveEndTimeCalendar.set(savedEndYear, savedEndMonth, savedEndDates, endhour, endmins, endsecs); 
        SED = saveEndTimeCalendar.getTime(); 
       } 
       List<DBObject> lists = (List<DBObject>) seeSaved.get("linkDownTime"); 
       int down = 0; 
       for (DBObject dating : lists) { 
        down = (int) dating.get("downTime"); //saved down time 
       } 
       String startHour = "00:00:00"; 
       String endHour = "24:00:00"; 
       long minutesInOneDay = 1440; 
       int numberOfDays = 0; 
       long dateDifference = 0l; 
       int totalCalculatedMins = 0; 
       try { 
        dateDifference = ED.getTime() - SD.getTime(); 
        long days = dateDifference/(24 * 60 * 60 * 1000); 
        numberOfDays = (int) days; 
        if (numberOfDays == 0) { 
         int min = (int) minutesInOneDay; 
         SimpleDateFormat format2 = new SimpleDateFormat("HH:mm:ss"); 
         Date parsedStartTime = format2.parse(startTime); 
         Date parsedEndTime = format2.parse(endTime); 
         Date parsedOriginalStartHour = format2.parse(startHour); 
         Date parsedOriginalEndHour = format2.parse(endHour); 
         long excludeStartTime = parsedOriginalEndHour.getTime() - parsedStartTime.getTime(); 
         long excludedStartMins = minutesInOneDay - (excludeStartTime/(60 * 1000)); 
         int excludedMins = (int) excludedStartMins; 
         long excludeEndTime = parsedEndTime.getTime() - parsedOriginalStartHour.getTime(); 
         long excludeEndMins = 1440 - (excludeEndTime/(60 * 1000)); 
         int excludeMins2 = (int) excludeEndMins; 
         long calculation = min - excludedMins - excludeMins2; 
         totalCalculatedMins = (int) calculation; 
        } else { 
         long minuetes = (minutesInOneDay * numberOfDays); 
         int min = (int) minuetes; 
         SimpleDateFormat format2 = new SimpleDateFormat("HH:mm:ss"); 
         Date parsedStartTime = format2.parse(startTime); 
         Date parsedEndTime = format2.parse(endTime); 
         Date parsedOriginalStartHour = format2.parse(startHour); 
         Date parsedOriginalEndHour = format2.parse(endHour); 
         long excludeStartTime = parsedOriginalEndHour.getTime() - parsedStartTime.getTime(); 
         long excludedStartMins = excludeStartTime/(60 * 1000); 
         int excludedMins = (int) excludedStartMins; 
         long excludeEndTime = parsedEndTime.getTime() - parsedOriginalStartHour.getTime(); 
         long excludeEndMins = 1440 + (-(excludeEndTime/(60 * 1000))); 
         int excludeMins2 = (int) excludeEndMins; 
         long calculation = min + excludedMins - excludeMins2; 
         totalCalculatedMins = (int) calculation; 
        } 
       } catch (Exception e) { 
        System.out.println("Exception being :-" + e); 
       } 
       DBObject sub = new BasicDBObject(); 
       sub.put("linkId", newId); 
       sub.put("year", year); 
       sub.put("month", month); 
       sub.put("downTime", totalCalculatedMins); 
       array.add(sub); 
       obj.put("linkDownTime", array); 
       BasicDBObject update = new BasicDBObject(); 
       update.put("$set", obj); 
       collection.update(match, update, true, false); 
       BasicDBObject newQuery = new BasicDBObject("linkId", obj.get("linkId")) 
         .append("startDate", obj.get("startDate")) 
         .append("endDate", obj.get("endDate")); 
       DBObject findNewQuery = collection.findOne(newQuery); 
       DBCollection collection2 = new MongoSetup().getDBCollection("linkTotalDownTime"); 
       List<DBObject> list = (List<DBObject>) findNewQuery.get("linkDownTime"); 
       for (DBObject data : list) { 
        String linkId = (String) data.get("linkId"); 
        int years = (int) data.get("year"); 
        int months = (int) data.get("month"); 
        int downTime = (int) data.get("downTime"); // current downTime 

        BasicDBObject look = new BasicDBObject(); 
        look.append("linkID", linkId).append("Year", year).append("month", month); 
        DBObject findData = collection2.findOne(look); 
        int dataget = (int) findData.get("totaldownTime"); //totaldowntime 
        int finalValue = 0; 
        int finalTotalValue = 0; 
        if (collection2.count() == 1) { 
         if (PSDate.compareTo(SSD) == 1) { 
          if (downTime > down) { 
           finalValue = down - downTime; 
           finalTotalValue = (int) (dataget - finalValue); 
          } else if (down > downTime) { 
           finalValue = down - downTime; 
           finalTotalValue = (int) (dataget - finalValue); 
          } 
         } else if (PSDate.compareTo(SSD) == -1) { 
          if (downTime > down) { 
           finalValue = downTime - down; 
           finalTotalValue = (int) (dataget + finalValue); 
          } else if (down > downTime) { 
           finalValue = down - downTime; 
           finalTotalValue = (int) (dataget + finalValue); 
          } 
         } else if (PEDate.compareTo(SED) == 1) { 
          if (downTime > down) { 
           finalValue = downTime - down; 
           finalTotalValue = (int) (dataget + finalValue); 
          } else if (down > downTime) { 
           finalValue = down - downTime; 
           finalTotalValue = (int) (dataget + finalValue); 
          } 
         } else if (PEDate.compareTo(SED) == -1) { 
          if (downTime > down) { 
           finalValue = downTime - down; 
           finalTotalValue = (int) (dataget - finalValue); 
          } else if (down > downTime) { 
           finalValue = down - downTime; 
           finalTotalValue = (int) (dataget - finalValue); 
          } 
         } 
        } else if (collection2.count() > 1) { 
         if (PSDate.compareTo(SSD) == 1) { 
          if (downTime > down) { 
           finalValue = downTime - down; 
           finalTotalValue = (int) (dataget - finalValue); 
          } else if (down > downTime) { 
           finalValue = down - downTime; 
           finalTotalValue = (int) (dataget - finalValue); 
          } 
         } else if (PSDate.compareTo(SSD) == -1) { 
          if (downTime > down) { 
           finalValue = downTime - down; 
           finalTotalValue = (int) (dataget + finalValue); 
          } else if (down > downTime) { 
           finalValue = down - downTime; 
           finalTotalValue = (int) (dataget + finalValue); 
          } 
         } else if (PEDate.compareTo(SED) == 1) { 
          if (downTime > down) { 
           finalValue = downTime - down; 
           finalTotalValue = (int) (dataget + finalValue); 
          } else if (down > downTime) { 
           finalValue = down - downTime; 
           finalTotalValue = (int) (dataget + finalValue); 
          } 
         } else if (PEDate.compareTo(SED) == -1) { 
          if (downTime > down) { 
           finalValue = downTime - down; 
           finalTotalValue = (int) (dataget - finalValue); 
          } else if (down > downTime) { 
           finalValue = down - downTime; 
           finalTotalValue = (int) (dataget - finalValue); 
          } 
         } 
        } 
        BasicDBObject update_two = new BasicDBObject(); 
        update_two.put("linkID", linkId); 
        update_two.put("Year", years); 
        update_two.put("month", months); 
        update_two.put("totaldownTime", finalTotalValue); 
        collection2.update(findData, update_two, true, false); 
       } 
       System.out.println("Updated Successfully ..."); 
      } catch (Exception ex) { 
       ex.printStackTrace(); 
      } 
     } 
+0

Sie sollten @ LukeJanyga Rat befolgen und java.time Framework verwenden. Beenden Sie die Verwendung von rohen java.util.Date-Objekten und verwenden Sie LocalDateTime, LocalDate, LocalTime und so weiter. – russellhoff

+0

können Sie mir sagen, wo der Fehler in meinem Code ist, warum gibt es keinen richtigen Monat Unterschied und Zeitunterschied? –

+0

Ich habe jetzt keine Zeit, um einen Blick auf Ihren Code zu werfen. Der beste Ansatz für Sie ist es, in die Java-Zeit zu wechseln, da Sie schneller arbeiten und weniger Zeilen Code erhalten. – russellhoff

Antwort

1

Bitte benutzen Sie JSR-310 (auch bekannt als ThreeTen), die zur Zeit ist der Standard für Java. Es bietet Klassen wie Duration oder ChronoUnit, die alle notwendigen Tools enthalten.

z. ChronoUnit.MONTHS.between() wird die Spanne zwischen 2 Daten in Monaten berechnen

-1
String calculateTime(String strDate) throws ParseException { 

    String result = ""; 
    SimpleDateFormat dateFormat = new SimpleDateFormat("ddMMHHmm"); 
    Date currDate = new Date(); 
    String date = dateFormat.format(currDate); 

    currDate = dateFormat.parse(date); 
    Date postDate = dateFormat.parse(strDate); 

    //calculate day diff 
    long timeDiff = currDate.getTime() - postDate.getTime(); 
    long daysDiff = TimeUnit.MILLISECONDS.toDays(timeDiff); 
    Calendar calendar = GregorianCalendar.getInstance(); 
    calendar.setTime(postDate); 

    if (daysDiff == 1) { 


     result = "yesterday"; 
     result = result + " at " + getHour(calendar.get(Calendar.HOUR)) + ":" 
       + setPrefix(calendar.get(Calendar.MINUTE))+ " " + getAM_PM(calendar.get(Calendar.AM_PM)); 

    } else if (daysDiff > 1) { 

     result = calendar.get(Calendar.DATE) + " " + getMonthForInt(calendar.get(Calendar.MONTH)); 
     result = result + " at " + getHour(calendar.get(Calendar.HOUR)) + ":" 
       + setPrefix(calendar.get(Calendar.MINUTE)) + " " + getAM_PM(calendar.get(Calendar.AM_PM)); 

    } else { 

     long minDiff = TimeUnit.MILLISECONDS.toMinutes(timeDiff); 


     if (minDiff == 0) { 

      result = "just now"; 
     } else if (minDiff < 60) { 

      if (minDiff == 1) { 

       result = minDiff + " min ago"; 
      } else if(minDiff > 1) { 
       result = minDiff + " mins ago"; 
      } 

     } else { 

      long hourDiff = TimeUnit.MILLISECONDS.toHours(timeDiff); 

      if (hourDiff == 1) { 

       result = hourDiff + " hr ago"; 
      } else if(hourDiff > 1){ 

       result = hourDiff + " hrs ago"; 

      } 

     } 

    } 

    return result; 
} 
Verwandte Themen