Nächstmögliche Zeit erhalten

internet

Top Contributor
Hallo Community,

Ich habe eine Liste von "ExetutionSettingTime". Die Klasse sieht so aus:

Java:
[CODE=java]public class ExecutionSettingTime {

       private WeekDay weekDay = WeekDay.MONDAY;
    private Date startTime = setTime(9);
    private Date endTime = setTime(17);

    //////////////////////////
    ////// FUCNTION ///
    //////////////////////////

    private Date setTime(int hour) {
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.HOUR_OF_DAY, hour);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);

        Date d = cal.getTime();

        return d;
    }

}
[/CODE]

Hier mein WeekDay Enum:

Java:
public enum WeekDay {

    MONDAY("MONDAY", "Montag", 2), //
    TUESDAY("TUESDAY", "Dienstag", 3), //
    WEDNESDAY("WEDNESDAY", "Mittwoch", 4), //
    THURSDAY("THURSDAY", "Donnerstag", 5), //
    FRIDAY("FRIDAY", "Freitag", 6), //
    SATURDAY("SATURDAY", "Samstag", 7), //
    SUNDAY("SUNDAY", "Sonntag", 1), //
    ;
    /////////////////////////

    private String fieldName;
    private String languageName;
    private int weekDay;
}


Nun möchte ich meine Liste durchgehen und von jetztigem Zeitpunkt das nächstmögliche Objekt bekommen.

Also zum Beispiel habe ich 3 Objekte in der Liste:
ExecutionSettingTime date1 = new (WeekDay.MONDAY, setTime(9);, setTime(17));
ExecutionSettingTime date2 = new (WeekDay.FRIDAY, setTime(9);, setTime(17));
ExecutionSettingTime date1 = new (WeekDay.TUESDAY, setTime(9);, setTime(17));

Vom heutigen Tag (Sonntag), wäre dann "date1" das nächstgelegene Objekt.

Mir fehlt eine Logik, wie wie ich nun das nächstgelegene Objekt aus der Liste bekommen:
Ich denke bei "?????" fehlt mir eine entsprechende Abfrage.

Java:
            Calendar calendar = Calendar.getInstance();
            int currentWeekDay = calendar.get(Calendar.DAY_OF_WEEK);
            Date currentDateTime = new Date();

            ExecutionSettingTime nearest;
            for (ExecutionSettingTime executionSettingTime : executionSetting.getExecutionSettingTimeList()) {
                // ????????
            }

Kann mir hier jemand helfen?
 

mrBrown

Super-Moderator
Mitarbeiter
Genereller Hinweis: die Calendar-Api ist inoffiziell deprected und absolut nicht zu empfehlen, die neue java.time-Api ist deutlich besser, selbst wenn du dir zusätzlich noch einen Arm abhackst :)


Kann mir hier jemand helfen?
zB Liste sortieren und dann das erste daraus nehmen.

Zum sortieren zB aus dem ExecutionSettingTime das nächste "echte" Datum berechnen, welches nach dem aktuellen liegt.
 

internet

Top Contributor
ich weiß nicht so ganz, ob das das richtige ist, was ich suche...

Ich möchte das geplante Datum der Ausführung in meiner Datenbank speichern. Daher will ich das Datum berechnen (meine Eingangsfrage)

Alle Ausführungen (also das eigentliche Ausführen der Aktion, wie Emailversand etc.) wird hier gesteuert.
Hierzu läuft dann jede Minute eine Datenbankabfrage, ob es noch nicht erfolgreiche ausgeführte Aktionen (Status != succeded oder running) und Datum < now gibt.
Falls ja, dann wird der Task in meine Queue hinzugefügt...

Das gibt es zB bei IBM Cognos:
maxresdefault.jpg
 

mrBrown

Super-Moderator
Mitarbeiter
Dann wie gesagt, für jede ExecutionSettingTime das nächste "echte" Datum berechnen, und dann das kleinste suchen.
 

mrBrown

Super-Moderator
Mitarbeiter
Grob etwa so:
Java:
        DayOfWeek day = DayOfWeek.MONDAY;
        int hour = 17;
        
        LocalDateTime now = LocalDateTime.now();
        
        LocalDateTime start = now.withHour(hour);
        if (start.isBefore(now)) {
            start = (LocalDateTime) TemporalAdjusters.next(day).adjustInto(start);
        } else {
            start = (LocalDateTime) TemporalAdjusters.nextOrSame(day).adjustInto(start);
        }
 

internet

Top Contributor
Ich verstehe das Problem nicht. Willst Du jetzt aus der DB oder im Code das nächste Element ermitteln?

Im Code brauchst Du doch lediglich die Liste chronologisch zu sortieren und anschließend eine binäre Suche durchführen (s. https://docs.oracle.com/javase/8/do...Search-java.util.List-T-java.util.Comparator-)

Falls Du nur das nächste Element aus der DB ermitteln willst, ist das ein einfacher SELECT.

Nein, ich will im Code die Uhrzeit ermitteln für den nächstmöglichen Zeitpunkt, wann der Scheduler starten kann.
Hierzu habe ich eine Liste an möglichen Wochentagen mit Uhrzeiten, die ich in der GUI definiere.
Wie hier:
platform-workflow-general-tab-settings.png


Das soll also passieren:
1) Aktion wird gestartet
2) Zeitpunkt für das Durchführen (der Schedule) soll ermittelt werden
-> Nun wird eben erst mal geschaut, ob es "Specifc times" gibt. Wenn ja: die Liste holen (ExecutionSettingTime)
-> a). Es gibt eine TimeRange (ExecutionSettingTime), die in der JETZIGEN Zeit/Tag liegt, dann soll das jetzige Datum zurückgegeben werden (also der Schedule kann sofort starten)
- b) Es gibt kein Objekt von ExecutionSettingTime, das im Zeitraum von der jetzigen Tag / Uhrzeit liegt, dann soll der nächstmögliche Tag / Uhrzeit aus der Liste herausgegeben werden

@mrBrown
Danke.. Mir fehlt aber noch die Prüfung von startTime / EndTime?
Wie kann ich das machen? Ebenfalls die Prüfung, ob die jetzige Uhrzeit in einer Zeitspanne von einem ExecutionSettingTime Objekt liegt.


Java:
public class Test {

    public static void main(String[] args) {

        ExecutionSettingTime date1 = new ExecutionSettingTime(WeekDay.MONDAY, ExecutionSettingTime.setTime(9),
                ExecutionSettingTime.setTime(17));
        ExecutionSettingTime date2 = new ExecutionSettingTime(WeekDay.FRIDAY, ExecutionSettingTime.setTime(9),
                ExecutionSettingTime.setTime(17));
        ExecutionSettingTime date3 = new ExecutionSettingTime(WeekDay.TUESDAY, ExecutionSettingTime.setTime(9),
                ExecutionSettingTime.setTime(17));
        
        ArrayList<ExecutionSettingTime> list = new ArrayList<ExecutionSettingTime>();
        list.add(date1);
        list.add(date2);
        list.add(date3);
        
        ArrayList<LocalDateTime> dateList = new ArrayList<LocalDateTime>();
        for(ExecutionSettingTime executionSettingTime : list) {
            dateList.add(getDate(executionSettingTime));
        }
            
        
    }

    public static LocalDateTime getDate(ExecutionSettingTime executionSettingTime) {

        DayOfWeek day = executionSettingTime.getWeekDay().getDayOfWeek();
        int hour = executionSettingTime.getStartTime().getHours();

        LocalDateTime now = LocalDateTime.now();

        LocalDateTime start = now.withHour(hour);
        if (start.isBefore(now)) {
            start = (LocalDateTime) TemporalAdjusters.next(day).adjustInto(start);
        } else {
            start = (LocalDateTime) TemporalAdjusters.nextOrSame(day).adjustInto(start);
        }

        return start;
    }

}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
S Wie Rechne ich die Zeit in ...L um? Java Basics - Anfänger-Themen 15
I Zahl aufrunden (Zeit) Java Basics - Anfänger-Themen 43
H Primzahlen finden - Zeit optimieren Java Basics - Anfänger-Themen 34
B Prüfen, ob Zeit Überschreitung Java Basics - Anfänger-Themen 2
hello_autumn Zeit messen von ausgeführten Tools. Java Basics - Anfänger-Themen 1
B Nächster möglicher Tag bekommen / Nächste mögliche Zeit bekommen Java Basics - Anfänger-Themen 24
Y Warum aktualisiert die Zeit nicht? Java Basics - Anfänger-Themen 4
J Aktuelle Zeit in einer JavaFX Anwendung aktualisieren lassen Java Basics - Anfänger-Themen 4
S JButton soll für bestimmte Zeit verschwinden Java Basics - Anfänger-Themen 5
F actionPerformed() zur richtigen Zeit Java Basics - Anfänger-Themen 6
T Erste Schritte Schreiben Sie eine Klasse Zeit, die eine Zeitdauer in Minuten beschreibt. Die Anzahl Minuten verwalt Java Basics - Anfänger-Themen 3
F Zeit in Milli bis Mitternacht Java Basics - Anfänger-Themen 20
M Messandwendung nach Zeit und eigener Eingabe Java Basics - Anfänger-Themen 4
J Java Datum- Zeit Differenz bilden! Java Basics - Anfänger-Themen 4
N Server Zeit zur lokalen Zeit setzen. Java Basics - Anfänger-Themen 0
K Eine bestimmte Zeit, eine Schleife laufen lassen. Java Basics - Anfänger-Themen 4
N Zeit berechnen, die für eine Strecke benötigt wird Java Basics - Anfänger-Themen 3
S Threads Zu bestimmer Zeit Screenshot erstellen. Java Basics - Anfänger-Themen 2
M Zahlen verändern nach Zeit Java Basics - Anfänger-Themen 6
E Zeit zum bestimmten Datum in millisekunden berechnen Java Basics - Anfänger-Themen 5
H Methoden Stopwatch misst Zeit einer Methode nicht Java Basics - Anfänger-Themen 8
K Zeit auslesen von Timeserver einen Tag daneben Java Basics - Anfänger-Themen 11
S Zeit messe? Java Basics - Anfänger-Themen 8
L Zeit sekündlich aktualisieren Java Basics - Anfänger-Themen 7
S Zeit bestimmen Java Basics - Anfänger-Themen 4
E Algorithmen und Programmierung - Datum und Zeit ausgeben? Java Basics - Anfänger-Themen 8
J Aufgabe: Zeit in Sekunden Java Basics - Anfänger-Themen 9
F Einfache Klassen für Datum und Zeit Java Basics - Anfänger-Themen 3
K Zeit ablaufen lassen und nach Ablauf beenden Java Basics - Anfänger-Themen 5
M Zeit von microsekunden auf Format mm:ss Java Basics - Anfänger-Themen 13
G Methoden Zeit Umrechnungsfaktor Java Basics - Anfänger-Themen 2
M Reaktion auf bestimmte Zeit Java Basics - Anfänger-Themen 2
S Animation nach bestimmter Zeit ausführen Java Basics - Anfänger-Themen 3
F hat jmd Zeit mir bisschen zu helfen msn/skype Java Basics - Anfänger-Themen 10
R Kalender speichert keine Zeit Java Basics - Anfänger-Themen 2
F Zeit per Array "zurückdrehen" Java Basics - Anfänger-Themen 5
R Zeit kommt mir zu lange vor... Java Basics - Anfänger-Themen 7
C Ereignis nach einer gewissen Zeit Java Basics - Anfänger-Themen 10
C Falsche Zeit Java Basics - Anfänger-Themen 2
A Unix-Zeit verkürzen Java Basics - Anfänger-Themen 2
Z JScrollPane zeigt Zeit als Datum Java Basics - Anfänger-Themen 5
H Programm zu bestimmten Zeit ausführen Java Basics - Anfänger-Themen 3
R Stoppuhr: Zeit ermitteln und übergeben - Variable static?? Java Basics - Anfänger-Themen 6
G Umrechnung Zeit/Temperatur Java Basics - Anfänger-Themen 6
Luk10 Zeit-Aspekt in Java Java Basics - Anfänger-Themen 3
N zeit ausgeben Java Basics - Anfänger-Themen 5
C countdown/timer/Zeit warten lassen Java Basics - Anfänger-Themen 14
S Dynamisch Zeit auslesen Java Basics - Anfänger-Themen 11
X Fibonacci mit durchschnittlicher Zeit Java Basics - Anfänger-Themen 5
S Kennt jemand die Default-Cache Zeit beim Java-Plugin? Java Basics - Anfänger-Themen 2
M Zeitdauer-Klasse (zeit in java) Java Basics - Anfänger-Themen 9
1 Zeit und Datum der Letzten Bearbeitung einer Datei auslesen Java Basics - Anfänger-Themen 3
L Zeit stoppen in mehreren Threads Java Basics - Anfänger-Themen 2
B JFrame nur eine gewisse Zeit anzeigen Java Basics - Anfänger-Themen 3
R Zeit eingeben über Formular Java Basics - Anfänger-Themen 3
D Kann man die Bios Zeit auslesen? Java Basics - Anfänger-Themen 5
G Zeit-Funktion Java Basics - Anfänger-Themen 4
D Zeit Problem! Java Basics - Anfänger-Themen 8
M Zeit zurückgeben je sekunde Java Basics - Anfänger-Themen 8
F Zeit stoppen Java Basics - Anfänger-Themen 6
C Zeitberechnungen wieviel Zeit vergangen ist. Java Basics - Anfänger-Themen 4
J System Zeit Java Basics - Anfänger-Themen 3
D Zeit messen Java Basics - Anfänger-Themen 7
M Faktor Zeit in Java! Gibt es sowas? Java Basics - Anfänger-Themen 6
H Reaktion nach gewisser Zeit Java Basics - Anfänger-Themen 20
S Zeit berechnen Java Basics - Anfänger-Themen 6
C Zeit horchen! Java Basics - Anfänger-Themen 3
G Programm soll nach bestimmter Zeit etwas tun Java Basics - Anfänger-Themen 24
P Zeit - Thread bei Simulationen Java Basics - Anfänger-Themen 4
H TicTacToe: Zeit zwischen Zügen lassen Java Basics - Anfänger-Themen 9
C Zeit Schleife Java Basics - Anfänger-Themen 5
S Zeit messen! Java Basics - Anfänger-Themen 12
S CPU Zeit Java Basics - Anfänger-Themen 8
P Aktuelles Datum/Zeit in GMT? Java Basics - Anfänger-Themen 2
E Zeit runterlaufen lassen Java Basics - Anfänger-Themen 2
G Zeit auslesen in bestimmtem Format Java Basics - Anfänger-Themen 2
D String in Zeit umwandeln? Java Basics - Anfänger-Themen 3
G zeit subtrahieren Java Basics - Anfänger-Themen 6
E Nach einer gewissen Zeit wiederholen Java Basics - Anfänger-Themen 13
TRunKX Probleme mit der Zeit (Stunden Sekunden) Java Basics - Anfänger-Themen 7
W Zeit Variablen? Java Basics - Anfänger-Themen 6
S GregorianCalendar - Vergangene Zeit Java Basics - Anfänger-Themen 17
G Auf eine Uhrzeit xx Minuten addieren u. mit Akt. Zeit vergl. Java Basics - Anfänger-Themen 5
G Zeit im 24 Stundenrhythmus Java Basics - Anfänger-Themen 3
G Methode nach bestimmter Zeit aufrufen Java Basics - Anfänger-Themen 3
H GregorianCalendar Zeit abziehen (Countup) Java Basics - Anfänger-Themen 9
I Sass Compiler und String erhalten? Java Basics - Anfänger-Themen 7
K Warum gibt mir z. B. 40^128 eine Zahl? Ich dachte mit xor kann man nur booleanwerte erhalten, also prüfen ob etwas whar oder falsch ist? Java Basics - Anfänger-Themen 1
K mit String.splitt(",") ganzen Satz erhalten? Java Basics - Anfänger-Themen 3
D Sportwetten Daten Atomatisch analysieren um optimale Strategie zu erhalten Java Basics - Anfänger-Themen 6
S Zugriff auf Attribut einer unbekannten Klasse erhalten Java Basics - Anfänger-Themen 6
P Wert aus Tabelle erhalten Java Basics - Anfänger-Themen 1
D Ordner der Ausgeführten Datei erhalten Java Basics - Anfänger-Themen 4
M zuletzt erzeugtes Objekt erhalten Java Basics - Anfänger-Themen 6
B Erstes Element eines Vectors erhalten Java Basics - Anfänger-Themen 5
J Wie behalten Variablen den Wert, den sie in einer anderen Methode erhalten haben? Java Basics - Anfänger-Themen 14
B Datentypen Float ohne .0 ausgeben, sonstige Nachkommastellen aber erhalten Java Basics - Anfänger-Themen 4
F in for-Schleife deklarierte Variablen erhalten? Java Basics - Anfänger-Themen 6
D Access Abfrage - Results direkt als Array erhalten Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben