Temporaladjuster

rafi97

Mitglied
Hey,
ich erstelle momentan einen Ferienkalender.. ich habe viel in der API gelesen aber hab noch nicht genau verstanden wie der Temporaladjuster funktioniert.. wenn ich zum beispiel ein übergebenes Temporal Objekt umwandeln möchte in eines mit dem Datum des nächsten Termins dieses Feiertags. muss ich dann die LocalDateTime am besten benutzen? (als Parameter habe ich Temporal temporal, Rückgabe Temporal)

Code:
TemporalAdjuster nextNewsTemporalAdjuster = temporal1 -> {
                LocalDateTime result = LocalDateTime.from(temporal);
                result = result.plusYears(1); //möchte das Jahr +1 korrekt?
                return result;

leider ist mein Englisch nicht das Beste sodass ich mit den englischsprachigen Erklärungen wenig anfangen kann und leider kaum deutschspraachige Themen gefunden hab :/

Gruß
 

mrBrown

Super-Moderator
Mitarbeiter
Wenn du einfach nur das gleiche Datum, nur im nächsten Jahr, bekommen möchtest, passt das so.


Musst du denn TemporalAdjuster nutzen? Dabei wirst du ja immer casten müssen, eine spezifischere Methode wäre uU sinnvoller.
Gleiches gilt für den Datumstyp, ein Feiertag hat ja keine Uhrzeit, wenn es also nur um Tage geht, wäre sowas wie LocalDate sinnvoller. Dafür gäb es dann auch schon was passendes: https://docs.oracle.com/javase/8/do...ateAdjuster-java.util.function.UnaryOperator-
 

rafi97

Mitglied
danke für deine antwort!
ja muss ich.. ich muss die adjustInto(Temporal temporal) Methode benutzen.. ich verstehe nicht genau was temporal ist, das ist doch sozusagen ein Tag oder versteh ich das falsch?
 
X

Xyz1

Gast
in eines mit dem Datum des nächsten Termins dieses Feiertags
Das geht nach den Docs so:
Java:
	static TemporalAdjuster nextOrSameEvent = (temporal) -> TemporalAdjusters
			.ofDateAdjuster(
					d -> !LocalDate.now().isAfter(d) ? d : d.plusYears(LocalDate.now().getYear() - d.getYear() + 1))
			.adjustInto(temporal);

	public static void main(String[] args) {
		System.out.println(nextOrSameEvent.adjustInto(LocalDate.of(2020, 2, 29)));
		System.out.println(nextOrSameEvent.adjustInto(LocalDate.of(2020, 3, 29)));
		System.out.println(nextOrSameEvent.adjustInto(LocalDate.of(2016, 2, 29)));
	}

(Den 29.03. hatten wir bis dato noch nicht^^)
 

rafi97

Mitglied
@Tobias-nrw
vielen dank :) hatte einen denkfehler dass die feiertage ja auch noch kommen können im selben jahr^^
bei mir heißt es "temporal is already defined in the scope.. aber genau diese wollen wir doch hernehmen oder? liegt das eventuell daran dass ich die methode aus einem interface implementiere (darf nicht static sein) .
 
X

Xyz1

Gast
Also 'nextOrSameEvent' ist eine anonyme innere Klasse in Form eines Lambda-Ausdrucks - innerhalb des Lambda Ausdrucks wird mit 'TemporalAdjusters.ofDateAdjuster' noch-mal ein 'TemporalAdjuster' instantiiert, der die eigentliche Logik beinhaltet - und eine Methode ('adjustInto(...)') darauf aufgerufen - und das Ergebnis stellt die Rückgabe der Methode des äußeren 'TemporalAdjuster' dar...

interface implementiere
Du kannst natürlich auch ganz einfach und klassisch eine Klasse schreiben, die von 'TemporalAdjuster' erbt und diese also implementiert. Interfaces dürfen allerdings keine Implementierungen enthalten.

Dann noch was ganz anderes... Wenn es nicht nur um Feiertage sondern auch um Schulferien etc geht dann brauchst Du eigentlich eine Zeitspanne.
 

Neue Themen


Oben