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();
}
}
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
können Sie mir sagen, wo der Fehler in meinem Code ist, warum gibt es keinen richtigen Monat Unterschied und Zeitunterschied? –
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