Aufs nächste Zweistundenintervall aufrunden

White_Fox

Top Contributor
Erst aufrunden, und dann mit Modulo 2 prüfen ob du bei einer geraden Uhrzeit rausgekommen bist. Oder gleich das Ergebnis von Modulo 2 addieren.
 

Oneixee5

Top Contributor
Java:
    public static Instant roundEvenHourUp(final Instant instant) {
        final Instant rounedInstant = instant
                .plus(ChronoUnit.HOURS.getDuration().minus(1, ChronoUnit.MICROS))
                .truncatedTo(ChronoUnit.HOURS);
        final int hour = rounedInstant.atZone(ZoneId.systemDefault()).getHour();
        return rounedInstant.plus(hour % 2, ChronoUnit.HOURS);
    }

    final LocalDateTime date = LocalDateTime.now();
    final Instant instant = roundEvenHourUp(date.atZone(ZoneId.systemDefault()).toInstant());
    System.out.format("%1$td.%1$tm.%1$tY %1$tH:%1$tM:%1$tS",
            instant.atZone(ZoneId.systemDefault()));
Java:
for (int i = 0; i < 23; i++) {
    final LocalDateTime date = LocalDateTime.of(2023, Month.MAY, 2, i, 57, 57);
    final Instant instant = roundEvenHourUp(date.atZone(ZoneId.systemDefault()).toInstant());
    System.out.format("%1$td.%1$tm.%1$tY %1$tH:%1$tM:%1$tS%n",
                      instant.atZone(ZoneId.systemDefault()));
}
 
Zuletzt bearbeitet:

berndoa

Top Contributor
Spontan haette ich gesagt Stunde +2 und Minuten und Sekunden einfach auf 0 setzen. Muesste ich aber nochmal darueber nachdenken ob das alle Eckfaelle abdeckt, aber denke schon.
Noch ein modulo 24 nachschalten (damit bspw. 23 Uhr auf 0 Uhr geändert wird) und es sollte passen :)

Auch ganz am Anfang noch ein Check rein:
Falls Minuten, Sekunden etc (alles ausser stunden) gleich 0 ist, dann bleibt Alles so wie es ist.
Ansosnten muss geändert werden


:)
 

soists

Mitglied
Spontan haette ich gesagt Stunde +2 und Minuten und Sekunden einfach auf 0 setzen. Muesste ich aber nochmal darueber nachdenken ob das alle Eckfaelle abdeckt, aber denke schon.
Danke... so ähnlich hats funktioniert:

Java:
    public static void normalizeJsonData() throws IOException {
        long one_hour = (1000 * 60 * 60);
        long two_hours = (1000 * 60 * 60 * 2);
        File dir = new File(DIR_NAME);
        File[] files = dir.listFiles();
        if (files == null) throw new AssertionError();
        for (File file : files) {
            JsonArray array = getJsonArray(file);
            JsonObject firstObj = array.get(0).getAsJsonObject();
            long start = firstObj.get("x").getAsLong() / two_hours * two_hours;
            long stop = start + two_hours;
            List<List<JsonObject>> chunks = new ArrayList<>();
            List<JsonObject> newChunks = new ArrayList<>();
            for (JsonElement je : array) {
                JsonObject jo = je.getAsJsonObject();
                long x = jo.get("x").getAsLong();
                if (x >= start && x < stop) {
                    newChunks.add(jo);
                } else {
                    chunks.add(newChunks);
                    newChunks = new ArrayList<>();
                    newChunks.add(jo);
                    start = stop;
                    stop = stop + two_hours;
                }
            }
            chunks.add(newChunks);
            JsonArray newArray = new JsonArray();
            for (List<JsonObject> chunk : chunks) {
                double min =
                        chunk.stream()
                                .mapToDouble(jo -> jo.get("y").getAsFloat())
                                .min()
                                .orElseThrow();
                double max =
                        chunk.stream()
                                .mapToDouble(jo -> jo.get("y").getAsFloat())
                                .max()
                                .orElseThrow();
                double avr =
                        chunk.stream()
                                .mapToDouble(jo -> jo.get("y").getAsFloat())
                                .average()
                                .orElseThrow();
                double newY = Math.abs(min - avr) >= Math.abs(max - avr) ? min : max;
                long newX =
                        chunk.get(0).getAsJsonObject().get("x").getAsLong() / two_hours * two_hours
                                + one_hour;
                JsonObject newObj = new JsonObject();
                newObj.addProperty("x", newX);
                newObj.addProperty("y", (float) newY);
                newArray.add(newObj);
            }
            try (FileWriter fw = new FileWriter(file, Charset.defaultCharset())) {
                fw.write(newArray.toString());
            }
        }
    }

Das war schon der ganze Trick:

Java:
long start = longZeitstempel / two_hours * two_hours;

long stop = start + two_hours;
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 Intelij, wie kann ich einstellen, dass die aktuelle Klasse ausgeführt wird, wenn ich aufs Startsymbol drücke, gibts da eine Tastenkombination? Java Basics - Anfänger-Themen 11
G Zugriff aufs Netzwerkinterface (NIC) Java Basics - Anfänger-Themen 4
D Vom einem package aufs andere zugreifen Java Basics - Anfänger-Themen 7
E Array, nächste Zahl zur 5 ausgeben, wie? Java Basics - Anfänger-Themen 42
M Objekt mit eindeutiger ID löschen, das nächste Objekt hat dann diese ID Java Basics - Anfänger-Themen 5
B Nächster möglicher Tag bekommen / Nächste mögliche Zeit bekommen Java Basics - Anfänger-Themen 24
S BufferedReader nächste Zeile lesen Java Basics - Anfänger-Themen 4
S Java CSV, er nimmt die nächste Zeile nicht Java Basics - Anfänger-Themen 2
N Nächste Frage aufrufen in einer Schleife Java Basics - Anfänger-Themen 8
G Anfängerbuch geschafft - nächste Schritte? Java Basics - Anfänger-Themen 14
C Von einer Klasse auf die nächste Zugreifen und die Methode nutzen? Java Basics - Anfänger-Themen 5
E Nächste freie Zeile in jTable ansprechen Java Basics - Anfänger-Themen 5
-horn- CSV-file zeilenweise einlesen, was bearbeiten, nächste Zeile Java Basics - Anfänger-Themen 15
C Wenn Wert existiert, dann weiter auf nächste Seite Java Basics - Anfänger-Themen 2
C Nächste Zeile in einer Datei Java Basics - Anfänger-Themen 5
A nächste Zeile schreiben Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben