Zahl aufrunden (Zeit)

internet

Top Contributor
Hallo,

ich würde gerne folgendes implementieren:
- Ich habe eine Uhrzeit und möchte die entsprechend (je nach Einstellung auf- oder abrunden auf bestimmte Zeiten).

Einstellung1:
- Aufrunden
- Immer auf die nächsten 5 Minuten runden

Es ist bspw. 09:07 Uhr... Nun soll dies auf 09:10 aufgerundet werden. Also die nächste volle Zahl, die 5 ergibt.

Einstellung2:
- Abrunden
- Immer auf die nächsten 5 Minuten runden

Es ist bspw. 09:07 Uhr... Nun soll dies auf 09:05 abgerundet werden. Also die nächste volle Zahl, die 5 ergibt.

Kann hier jemand helfen?
 

Staarfightaar

Bekanntes Mitglied
das aufrunden kannst du dir so ausdenken

09:07 - 00:02 + 00:05

dh deine zeit nimmst du %5 , den rest zihst von der zeit ab, und rechnest 5 drauf ( musst halt neue stunde beachten)... im prinzip rundest du gar nicht
 

Staarfightaar

Bekanntes Mitglied
erstmal

1. wie speicherst du die zeit`? string? als objekt? als int???
2. wie kannst du mit deinem datentypen rechen

das beispiel ist so
wenn du 12 min auf runden willst
12 % 5 == 2
das modulo ergebnis ziehst du ab
also
10
und dann noch 5 drauf rechnen
15
 

internet

Top Contributor
erstmal

1. wie speicherst du die zeit`? string? als objekt? als int???
2. wie kannst du mit deinem datentypen rechen

das beispiel ist so
wenn du 12 min auf runden willst
12 % 5 == 2
das modulo ergebnis ziehst du ab
also
10
und dann noch 5 drauf rechnen
15

Ich speichere die Zeit in LocalDateTime...
Daraus kann ich ja die Minute extrahieren...

Ok, das heißt:

Bei Aufrunden:
- Ziehe ich das modulo Ergebnis ab und zähle ich immer noch die 5 dazu?

Beim Abrunden:
- Ziehe ich nur das modulo Ergebnis ab?
 

Staarfightaar

Bekanntes Mitglied
Ich speichere die Zeit in LocalDateTime...
Daraus kann ich ja die Minute extrahieren...

Ok, das heißt:

Bei Aufrunden:
- Ziehe ich das modulo Ergebnis ab und zähle ich immer noch die 5 dazu?

Beim Abrunden:
- Ziehe ich nur das modulo Ergebnis ab?
wäre mein ansatz den ich machen würde, problem ist halt wenn du die zeit 57 hast, dann musst du ja die stunde aufrunden , wie das geht puh.. hab mit local datetime nicht viel gemacht

aber im prinzip ja wäre mein ansatz
 

Jw456

Top Contributor
(int)(anzahlMinuten / 5) *5 +5

Müsste doch stimmen
Aber was ist bei den schon genannten 57 min ? Da muss die Stunde oder sogar der Tag erhöht werden.
Zb bei 23:57 Uhr
Deshalb die Methode plusMinutes.
Wo bei plus 3 der Tag und auch die Stunde sich anpassen müsste bei dem zurückgeben LocalDateTime.

57/5 =11
11*5 = 55
55 + 5 = 60

60 als min gibt es doch nicht
 
Zuletzt bearbeitet:

thecain

Top Contributor
Vll speichert er die Uhrzeit ja in Minuten und sonst soll er halt umrechnen... Ging mMn darum wie mans ausrechnet.
Ach ja und zum abrunden einfach nicht + 5 rechnen...
 

mihe7

Top Contributor
Etwa so:
Java:
TemporalAdjuster fiveMinutesUp = temporal -> {
    LocalTime time = (LocalTime) temporal;
    LocalTime result = time.plusMinutes(4);
    int fiveMinuteUnits = result.getMinute() / 5;
    return result.withMinute(fiveMinuteUnits * 5);
};
TemporalAdjuster fiveMinutesDown = temporal -> {
    LocalTime time = (LocalTime) temporal;
    LocalTime result = time;
    int fiveMinuteUnits = result.getMinute() / 5;
    return result.withMinute(fiveMinuteUnits * 5);
};
Java:
LocalTime.of(23,57).with(fiveMinutesUp).equals(LocalTime.of(0,0));
LocalTime.of(23,55).with(fiveMinutesUp).equals(LocalTime.of(23,55));
LocalTime.of(23,41).with(fiveMinutesUp).equals(LocalTime.of(23,45));
LocalTime.of(0,0).with(fiveMinutesDown).equals(LocalTime.of(0,0));
LocalTime.of(0,4).with(fiveMinutesDown).equals(LocalTime.of(0,0));
LocalTime.of(0,5).with(fiveMinutesDown).equals(LocalTime.of(0,5));
 

internet

Top Contributor
Danke.
5 war allerdings nur ein Bespiel…
Es könnte also eig. auch jede Zahl zwischen 0-59 sein…

LocalTime result = time.plusMinutes(4);
-> das verstehe ich nicht
 

mihe7

Top Contributor
LocalTime result = time.plusMinutes(4);
-> das verstehe ich nicht
Die Rechnung danach rundet immer ab auf volle 5-Minuten-Einheiten.

Beispiel:
17:20 -> result = 17:24. Auf volle 5-Minuten-Einheiten abgerundet: 17:20
17:21 -> result = 17:25. Auf volle 5-Minuten-Einheiten abgerundet: 17:25
17:24 -> result = 17:29. Auf volle 5-Minuten-Einheiten abgerundet: 17:25
 

Staarfightaar

Bekanntes Mitglied
5-(57%5) = 3
3%5 = 3

Doppel gemoppelt
die methoden tun halt nicht das was eig geplant war

da bei 0 1 2 abgerundet wird

und bei 3 4 5 aufgerundet werden soll

diese methode rechnet immer auf den nächsten 5er außer es ist 00 , 10 , 20 ,30 ,40,,50 als mintuen werte da bleibts dann gleich
das abrunden bei 1 2 wurde konstruktiv ignoriert
 

Staarfightaar

Bekanntes Mitglied
das doppelte %5 macht halt dass es bei den werten mit 0 am ende gleich bleibt aber das war ja nur ein teil der anforderung

Java:
if(minuten%5 < 2){
    abrunden()
}
else{
    aufrunden()
}
wenn man das if einbaut ist das doppelte %5 doppelt gemoppelt weil der fall schon abgedeckt ist in abrunden :)
 

Staarfightaar

Bekanntes Mitglied
du solltest die uhrzeit 9:07 mit deinen methoden behandeln sommit das richtige raus kommt, das richtige was raus kommen soll ist das was der TE gefordert hat
 

Jw456

Top Contributor
Der TE widerspricht sich etwas beim Beispiel 9:07 Uhr soll einmal auf und einmal abgerundet werden auf 5 min

Ich denke er baut sowas wie eine Stempel Uhr wo beim Einstempeln abgerundet und beim Ausstempeln aufgerundet wird.

Sonnst hätte er nicht in beiden Beispielen 09:07 Uhr angegeben.


Eigentlich will er zwei Methoden haben die eine soll auf und die andere ab runden.
Einstempeln abrunden
Ausstempeln aufrunden
 
Zuletzt bearbeitet:

Staarfightaar

Bekanntes Mitglied
Er will selbst entscheiden wann auf und wann ab gerundet wird.

Nicht ob der rest von 1-2 oder 3 - 4 geht

17:20 -> result = 17:24. Auf volle 5-Minuten-Einheiten abgerundet: 17:20
17:21 -> result = 17:25. Auf volle 5-Minuten-Einheiten abgerundet: 17:25
17:24 -> result = 17:29. Auf volle 5-Minuten-Einheiten abgerundet: 17:25
dann verwirrt mich das in kombination

und 17:20 müsste dann bei aufrunden 17:25 ergeben da man schon sekunden in dem bereich zwischenn 17:20 und 17:25 ist
 

Jw456

Top Contributor
dann verwirrt mich das in kombination

und 17:20 müsste dann bei aufrunden 17:25 ergeben da man schon sekunden in dem bereich zwischenn 17:20 und 17:25 ist
17:20 20 %5 ist 0 kein runden nötig
Beim plusMinutes (0)
passiert nichts es wird 17:20 zurück gegeben

Sek wird ja hier nicht beachtet. Die bleiben immer gleich. Werden bei der Stempeluhr sicherlich nicht beachtet.
 

Jw456

Top Contributor
Abrunden
(57 % 5)%5 =2 und jetzt die minus Methode von LocalDateTime

Aufrunden
(5-57 % 5)%5 =3
Und jetzt die plusMinutes Methode von LocalDateTime
(5-55%5)%5 = 0

PS hier muss das zweite modulo eigentlich nicht sein.
 
Zuletzt bearbeitet:

internet

Top Contributor
Würde das so passen?
Ich muss ja bei einer Stempeluhr die Start und Endzeit betrachten?

Java:
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        TimeRecordingSetting timeRecordingSetting = new TimeRecordingSetting();
        timeRecordingSetting.setRoundingMinuteValue(5);
        timeRecordingSetting.setRoundingMode(TimeRecordingSetting.RoundingMode.ROUNDING_UP.toString());

        TimeRecording timeRecording = new TimeRecording();
        timeRecording.setStartTime(LocalTime.of(9, 3));
        timeRecording.setEndTime(LocalTime.of(9, 12));

        int roundingMinuteValue = timeRecordingSetting.getRoundingMinuteValue();

        LocalTime newDateEndTime = null;
        LocalTime newDateStartTime = null;
        int minsStart = 0;
        int minsEnd = 0;

        if (timeRecordingSetting.getRoundingMode().equals(TimeRecordingSetting.RoundingMode.ROUNDING_UP.toString())) {

            minsStart = timeRecording.getStartTime().get(ChronoField.MINUTE_OF_HOUR);
            newDateStartTime = timeRecording.getStartTime()
                    .plusMinutes((roundingMinuteValue - minsStart % roundingMinuteValue) % roundingMinuteValue);
            
            minsEnd = timeRecording.getEndTime().get(ChronoField.MINUTE_OF_HOUR);
            newDateEndTime = timeRecording.getEndTime()
                    .plusMinutes((roundingMinuteValue - minsEnd % roundingMinuteValue) % roundingMinuteValue);

        }

        if (timeRecordingSetting.getRoundingMode().equals(TimeRecordingSetting.RoundingMode.ROUNDING_DOWN.toString())) {
            
            minsStart = timeRecording.getStartTime().get(ChronoField.MINUTE_OF_HOUR);
            newDateStartTime = timeRecording.getStartTime().minusMinutes(minsStart % roundingMinuteValue);
            
            minsEnd = timeRecording.getEndTime().get(ChronoField.MINUTE_OF_HOUR);
            newDateEndTime = timeRecording.getEndTime().minusMinutes(minsEnd % roundingMinuteValue);
        }

        timeRecording.setStartTime(newDateStartTime);
        timeRecording.setEndTime(newDateEndTime);
        
        System.out.println(newDateStartTime);
        System.out.print(newDateEndTime);
    }
 

Jw456

Top Contributor
Beim Einstempeln Start musst du abrunden also die minus Methode von LocalDateTime benutzen schau Doku wie die genau heißt.

Baue dir zwei Methoden zum auf und abrunden.
Nicht alles in einer Methode.
 

Staarfightaar

Bekanntes Mitglied
timeRecordingSetting.setRoundingMode(TimeRecordingSetting.RoundingMode.ROUNDING_UP.toString());
warum übergibst du es als string? das macht so in dem aktuellen code keinen sinn

leg halt in der klasse TimeRecordingSetting ein attribut an
Java:
class TimeRecordingSetting{
    RoundingMode mode;
    
    public void setRoundingMode(RoundingMode mode){
        this.mode = mode
    }
}
und dann rufst du es so auf
timeRecordingSetting.setRoundingMode(TimeRecordingSetting.RoundingMode.ROUNDING_UP);

und der verlgeich wird dann zu
timeRecordingSetting.getRoundingMode() == TimeRecordingSetting.RoundingMode.ROUNDING_UP)
und das ist nur ein punkt der gerade so auffällt

das zweite ist logik
du hast rechnest entweder beide male hoch , oder beide male runter.. ist das denn beabsichtigt?
 

internet

Top Contributor
warum übergibst du es als string? das macht so in dem aktuellen code keinen sinn

leg halt in der klasse TimeRecordingSetting ein attribut an
Java:
class TimeRecordingSetting{
    RoundingMode mode;
   
    public void setRoundingMode(RoundingMode mode){
        this.mode = mode
    }
}
und dann rufst du es so auf


und der verlgeich wird dann zu

und das ist nur ein punkt der gerade so auffällt

das zweite ist logik
du hast rechnest entweder beide male hoch , oder beide male runter.. ist das denn beabsichtigt?
Ja, kann man so machen mit dem Enum.. Ist aber nun nicht entscheidend...

Normalerweiße ist das ja so:
User stempelt (Start)
User stempelt (Ende)

Je nach Einstellung (auf- oder abrunden), wird dann die Zeit entsprechend angepasst. Sollte doch so passen?
 

Jw456

Top Contributor
Ja, kann man so machen mit dem Enum.. Ist aber nun nicht entscheidend...

Normalerweiße ist das ja so:
User stempelt (Start)
User stempelt (Ende)

Je nach Einstellung (auf- oder abrunden), wird dann die Zeit entsprechend angepasst. Sollte doch so passen?
Ja aber mache zwei Methoden dafür.
In der du die Zeit und die tolleranz bei dir 5 min übergibst . Zurück bekommst du die neue gerundete Zeit.
 

Jw456

Top Contributor
Na zwei Methoden eine die auf und eine die ab rundet.
Du wirst das in deinem Programm noch öfter brauchen. Willst du das jedes mal neu schreiben.

Du wirst doch wohl nicht alles in der main Methode machen wollen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Aufrunden einer Zahl Java Basics - Anfänger-Themen 10
ixChronos Letzten 4 Ziffern einer großen Zahl ausgeben Java Basics - Anfänger-Themen 3
T Ich brauche eine Schleife die eine beliebige Zahl so lange durch 10 teilt bis zur Null Java Basics - Anfänger-Themen 5
Shadowrunner Variablen Gibt es eine Möglichkeit die Ziffern/Stellen einer Zahl fest zu legen? Java Basics - Anfänger-Themen 3
T float soll durch schleife die größte mögliche Zahl herausfinden, Ausgabe ist aber "Infinity" Java Basics - Anfänger-Themen 1
T Eingabe durch eine Zahl dividieren nachgucken? Java Basics - Anfänger-Themen 4
G Bei dynamischer Arrayliste nach jeder Auswahl Zahl entfernen Java Basics - Anfänger-Themen 3
M Long-Typ in String-Änderung führt zu keinem Ergebnis bei großer Zahl Java Basics - Anfänger-Themen 11
E Array, nächste Zahl zur 5 ausgeben, wie? Java Basics - Anfänger-Themen 42
A Methoden Guten Tag , ich wollte so machen dass wenn meine frog an eine fly/bee geht dann an meine Tafel geht der zahl +1 hoch. Java Basics - Anfänger-Themen 2
B Überprüfung dass Zahl nur aus 0,1 besteht Java Basics - Anfänger-Themen 2
S Vollkommene Zahl berechnen und ausgeben Java Basics - Anfänger-Themen 16
B Hashmap richtig bauen, die Tripel auf Zahl abbildet? Java Basics - Anfänger-Themen 10
S Größte Zahl nach Eingabe der Zahl 0 ausgeben Java Basics - Anfänger-Themen 6
B 49-bit-zahl mit genau 6 Einsen bauen? Java Basics - Anfänger-Themen 21
D Kleinste Zahl in Array finden die vorher noch errechnet werden müssen. Java Basics - Anfänger-Themen 4
M Java Ausgabe der höchsten Zahl Java Basics - Anfänger-Themen 14
Thomas06 Wie kann man mithilfe von boolean herausfinden ob eine zahl durch 5 und 7 teilbart ist ? Java Basics - Anfänger-Themen 7
M Prüfen on eine Zahl im String enthalten ist Java Basics - Anfänger-Themen 3
M zahl raten Java Basics - Anfänger-Themen 1
G Position einer unbekannten 3-stelligen-Zahl in einem String finden Java Basics - Anfänger-Themen 15
sserio Prüfen, ob eine Zahl eine periodische Zahl ist Java Basics - Anfänger-Themen 20
H Erste Schritte Nach einer Zahl n soll n Mal der String untereinander ausgegeben werden Java Basics - Anfänger-Themen 3
M Eine Methode die erkennt ob die ein gegebene zahl größer oder kleiner sein muss Java Basics - Anfänger-Themen 2
D Gerade oder ungerade Zahl mittels Methoden Java Basics - Anfänger-Themen 13
TanTanIsTrying Durschnitt berechnen von eingegebener Zahl bis 1 heruntergezählt Java Basics - Anfänger-Themen 9
R Fortlaufende Zahl Java Basics - Anfänger-Themen 3
A Wenn eine Zahl durch 7 teilbar ist, soll statt der Zahl ein ‘*‘ angezeigt werden. java? Java Basics - Anfänger-Themen 47
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
I String Kombination erstellen anhand fortlaufender Zahl (Vertragsnummer) Java Basics - Anfänger-Themen 13
B Methoden Rekursiv festellen, ob eine Zahl gerade-oft vorkommt oder nicht Java Basics - Anfänger-Themen 4
W Wie ziehe ich von einer bestimmten Zahl, Zahlen ab, bis mein Ergebnis null beträgt? Java Basics - Anfänger-Themen 10
Q Prüfen ob Zahl als Summe von Potenzen dargestellt werden kann. Java Basics - Anfänger-Themen 20
HelpInneed Zahl. Java Basics - Anfänger-Themen 2
R Perfekte Zahl Java Basics - Anfänger-Themen 8
D Mittlerste Zahl Java Basics - Anfänger-Themen 17
D Grösste Zahl in einer Folge herausfinden. (ULAM) Java Basics - Anfänger-Themen 9
Poppigescorn Häufigkeit einer zahl zählen Java Basics - Anfänger-Themen 5
B Konkatenieren eines Strings und inkremtierenden Zahl zu einer INT Variablen Java Basics - Anfänger-Themen 7
Poppigescorn scan.nextInt() wiederholen bis eine Zahl eingeben wird Java Basics - Anfänger-Themen 7
J Verdoppeln einer Zahl (in dem Fall Münzen) Java Basics - Anfänger-Themen 4
C Programm das feststellen kann, ob eine eingegebene Zahl einem Schaltjahr entspricht, richtig geschrieben? Java Basics - Anfänger-Themen 11
S Algorithmus (reelle Zahl <65536 von dezimal zu dual) max. 10 Nachkommastellen Java Basics - Anfänger-Themen 4
K Wie kontrolliere ich ob ich die Zahl in meinem Array schon hab? Java Basics - Anfänger-Themen 9
T Zahl in Array ersetzen Java Basics - Anfänger-Themen 2
Abraham42 Prozentsatz einer Zahl mehrmals Java Basics - Anfänger-Themen 2
C Größte Zahl aus einem Array ermitteln(als statische Methode) Java Basics - Anfänger-Themen 31
Kingamadeus2000 Anzahl der Ziffern der kürzesten Zahl aus einem zurückliefern Java Basics - Anfänger-Themen 1
V Beliebige Dreistellige Zahl Teiler finden Java Basics - Anfänger-Themen 4
newcomerJava Nach doppelter Zahl eine Ausgabe Java Basics - Anfänger-Themen 10
W Random Zahl unter Berücksichtung eines Durchschnitts Java Basics - Anfänger-Themen 7
S Zahl eingeben Java Basics - Anfänger-Themen 8
A Java . punkt neben einer Zahl. Java Basics - Anfänger-Themen 1
F Eine Zahl mit Arrays vergleichen Java Basics - Anfänger-Themen 7
J Die größte Zahl anzeigen Java Basics - Anfänger-Themen 19
V Array auf eine Zahl durchsuchen Java Basics - Anfänger-Themen 15
X Nach einem Bruch testen ob es eine ganze Zahl ist Java Basics - Anfänger-Themen 6
L Erhöhung der Zahl Java Basics - Anfänger-Themen 3
F Negative Zahl erzwingen Java Basics - Anfänger-Themen 3
N Eine Zahl solange teilen bis es nicht möglich ist und die Ergebnisse ausgeben Java Basics - Anfänger-Themen 23
T Eulersche Zahl e Java Basics - Anfänger-Themen 5
S Letzte Zahl eines Integer auslesen? Java Basics - Anfänger-Themen 3
G Programm schreiben: Zahl (n) eingeben, 1+1/n+2/n+3/n+....+n/n Java Basics - Anfänger-Themen 8
B Eine ganze Zahl zerlegen. Java Basics - Anfänger-Themen 4
J Fehler beim generieren von 4 Zufallszahlen Zahl doppelt ist eigentlich ausgeschlossen Java Basics - Anfänger-Themen 9
H Harshad-Zahl (Nivenzahl) und Palindrom überprüfen Java Basics - Anfänger-Themen 2
I Wie viele 1 an Bits hat die Zahl x? Java Basics - Anfänger-Themen 5
A Gewürfelte Zahl ausgeben Java Basics - Anfänger-Themen 10
M Rationale Zahl erkennen - Kurze Frage zum Restwert nach Division Java Basics - Anfänger-Themen 3
A Überprüfen, ober eine Zahl Ziffer enthält Java Basics - Anfänger-Themen 12
O Markoff-Zahl Java Basics - Anfänger-Themen 22
B Datenbank, aktuelle Ende als Zahl an Label übergeben Java Basics - Anfänger-Themen 7
L 10-Stellige Zahl hochzählen lassen Java Basics - Anfänger-Themen 1
H String und Zahl Java Basics - Anfänger-Themen 10
R Zahl 1 bis 100 erraten Java Basics - Anfänger-Themen 12
Y Konkrete Hilfe gesucht - Anzahl der Stellen einer eingegebenen Zahl überprüfen Java Basics - Anfänger-Themen 5
J Button klick bei eine bestimmten Zahl Java Basics - Anfänger-Themen 8
B Zahl in String abspeichern und später berechnen Java Basics - Anfänger-Themen 15
H OOP eine Zahl immer weiter durch 2 teilen Java Basics - Anfänger-Themen 15
J Für jeden Buchstaben eine Zahl Java Basics - Anfänger-Themen 1
H Würfelspiel, stop bei gleicher Zahl Java Basics - Anfänger-Themen 4
B Array - die Häufigkeit der Zahl zählen Java Basics - Anfänger-Themen 9
I Erste Schritte Testen, ob eine Zahl eine Primzahl ist Java Basics - Anfänger-Themen 8
J Rekursive Methode - Ziffern einer Zahl ausgeben Java Basics - Anfänger-Themen 2
I Eulersche Zahl Java Basics - Anfänger-Themen 6
F Produkt d. Ziffern einer Zahl..?! Java Basics - Anfänger-Themen 5
J Die Zahl herausfinden die durch 2 - 30 Teilbar ist... Java Basics - Anfänger-Themen 17
A Ungeordnetes Array ordnen, Zahl einlesen und einordnen Java Basics - Anfänger-Themen 23
A Rechnen mit Text und Zahl Java Basics - Anfänger-Themen 4
T Datentypen char als Buchstaben statt als Zahl ausgeben Java Basics - Anfänger-Themen 4
S Jede Ziffer einer Zahl auslesen, damit rechnen und beim Ergebnis wiederholen ? Java Basics - Anfänger-Themen 20
H 32-Bit Zahl (Integer) in eine IPv4 Adresse umwandeln? Java Basics - Anfänger-Themen 2
Aprendiendo Gibt es in der JAVA-API eine Funktion, die eine Dezimalzahl in eine binäre Zahl umwandelt? Java Basics - Anfänger-Themen 8
M Mit 2 Threads eine Zahl hochzählen Java Basics - Anfänger-Themen 13
D String erste Zahl mit LKZ auslesen lassen Java Basics - Anfänger-Themen 36
C Erste Ziffer einer Zahl Java Basics - Anfänger-Themen 46
M Zeilenumbruch ab der 10. Zahl Java Basics - Anfänger-Themen 11
T Input/Output Int Eingabe auf Zahl überprüfen Java Basics - Anfänger-Themen 30
R Input/Output zahl aus showInputDialog() Java Basics - Anfänger-Themen 25
D Die Zahl in der Mitte finden Java Basics - Anfänger-Themen 20

Ähnliche Java Themen

Neue Themen


Oben