Ich habe diese Funktion, die ich schreiben soll, die eine Collection<String>
zurückgibt. Es hat 3 Parameter: LocalTime startDate
, LocalTime endDate
und Collection<String> logLines
. Ich soll den Funktionskörper schreiben, so dass er alle Zeilen aus dem Protokoll, die nicht innerhalb eines bestimmten Zeitraums sind, der durch startDate
und endDate
definiert wird, erfolgreich findet und entfernt und dann dieses Protokoll zurückgibt.LocalTime-Methoden, die ganze Zahlen zurückgeben, die keinen Sinn ergeben
Der Plan ist, die Stunden, Minuten zu bekommen, und Sekunden von endDate
und startDate
mit LocalTime
Methoden getHour()
, getMinute()
und getSecond()
und in Sekunden zu konvertieren, um zu sehen, wie viele Sekunden zu Beginn des Zeitraums verstrichen ist und wie viele verstrichene bis zum Ende des Zeitrahmens. Ich iteriere dann über alle Strings in logLines
. Sie sind im Format: 2012-05-11T02:11:44Z This program did this operation successfully.
. Ich teile jede Zeichenfolge, um den ersten Teil der Zeile zu erhalten, und analysiere sie unter Verwendung von LocalTime.parse()
im Format ISO_DATE_TIME
, um das Datum zu erhalten und es in LocalTime logDate
zu speichern. Schließlich verwende ich dieselben LocalTime
Methoden, die oben aufgeführt sind, um die gesamten Sekunden zu erhalten, die bis zu dieser Protokollierungszeit vergangen sind.
Das Problem, das ich habe ist, dass wenn ich die LocalTime
Methoden es alle die gleichen Zahlen immer und immer wieder, egal, was die Speicherung startDate
, endDate
oder logDate
ist. Ich habe noch nie zuvor Java 8 oder eine Java-Bibliothek verwendet, so dass ich mir nicht vorstellen kann, warum oder wie es das macht. Ich weiß, dass, wenn startDate
und endDate
übergeben werden sie auch Strings im selben Format wie das Protokolldatum mit LocalDate.parse()
und dem ISO_DATE_TIME
Format analysiert werden.
public Collection<String> search(Collection<String> logLines, LocalTime startDate, LocalTime endDate) {
// format date extracted from logLines to same format as startDate and endDate
DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE_TIME;
// total seconds elapsed at startDate
// total seconds elapsed by endDate
int startSeconds = startDate.getHour() * 60 * 60;
startSeconds += startDate.getMinute() * 60;
startSeconds += startDate.getSecond();
int endSeconds = endDate.getHour() * 60 * 60;
endSeconds += endDate.getMinute() * 60;
endSeconds += endDate.getSecond();
// iterate through logLines
int i = 0;
for(String logLine : logLines) {
// array of strings to separate logLine into parts
String[] line = new String[2];
line = logLine.split("\t");
// localTime object to store extracted date from logLines
LocalTime logDate = LocalTime.parse(line[0], formatter);
// get seconds elapsed from logDate
int logDateSeconds = logDate.getHour() * 60 * 60;
logDateSeconds += logDate.getMinute() * 60;
logDateSeconds += logDate.getSecond();
// print amount of seconds to console
System.out.print(logDateSeconds);
System.out.print(" ");
System.out.print(startSeconds);
System.out.print(" ");
System.out.print(endSeconds);
System.out.print("\n");
if (logDateSeconds > endSeconds || logDateSeconds < startSeconds) {
logLines.remove(i);
i--;
}
i++;
}
return logLines;
}
Wenn ich startSeconds
ausdrucken, endSeconds
und logDateSeconds
an die Konsole bekomme ich
12114 12116 12122
12114 12116 12122
12114 12116 12122
12114 12116 12122
12114 12116 12122
12114 12116 12122
12114 12116 12122
12114 12116 12122
egal, was die Eingaben.
Bitte zeigen Sie mir in die richtige Richtung.
Probeneingang:
logLines
enthält
2012-05-11T02:11:44Z This program did this operation successfully.
2012-05-11T02:12:52Z This program did this operation successfully.
2012-05-11T02:14:17Z This program did this operation successfully.
2012-05-11T02:18:02Z This program did this operation successfully.
2012-05-11T02:20:30Z This program did this operation successfully.
startDate = 02:11:44
und endDate = 02:19:57
Sie ohne Grund ein neues Array erstellen. Tun Sie einfach 'String [] line = logLine.split ("\ t"); '. – shmosel
Also, 'startSeconds' und' endSeconds' ändern sich nicht, der einzige relevante Teil Ihres Codes ist 'LocalTime logDate = LocalTime.parse (Zeile [0], Formatierer);' - Was ist die Eingabe? –
So habe ich das schon mal gemacht, aber ohne zu wissen, ob das ein Problem verursacht hat, habe ich es geändert. – kohai