Seite 3 von 6

Re: Laufende Wochenzahl errechnen

Verfasst: 12. Sep 2021 14:12
von udo1toni
Und was soll die Rule tun, wenn der Nachkommateil kleiner als 0,5 ist?

Das Problem wirst Du mit Runden nur im laufenden Jahr lösen können (im Sinne von: Du musst die Formel immer wieder mal anpassen).

Errechne den Wochentag des 1.1. Ist es Montag bis Donnerstag, so handelt es sich um die 1. KW. Ist es Freitag bis Sonntag, handelt es sich um die letzte KW des Vorjahres.
Errechne die Anzahl Wochen seit dem 1. Montag nach dem 1.1. und runde ab. Abhängig von der ersten Berechnung zähle 1 hinzu oder lass es.
Für die ersten Tage des Kalenderjahres sowie für die letzten Tage des Kalenderjahres musst Du noch eine Sonderregel berechnen. Ist der 1.1. ein Donnerstag und der 31.12. ein Donnerstag oder Freitag, so hat das Jahr eine 53. KW. Endet das Jahr mit Montag - Mittwoch, so handelt es sich um die 1. KW des Folgejahres.
Hört sich kompliziert an, aber die einzelnen Berechnungen sind nicht sooo schlimm. :)

Re: Laufende Wochenzahl errechnen

Verfasst: 15. Sep 2021 13:00
von PJH
@peter-pan zu Antwort Nr. 6

Hallo Peter, in Ermangelung anderer Möglichkeiten zur Berechnung der aktuellen Wochennummer, habe ich mich mit Deinem Vorschlag aus Antwort Nr. 6 befasst.

"udo1toni" hat mich zwar ermuntert, die von ihm genannte Berechnungen "seien nicht so schlimm", aber er hat keine Beispiele angefügt und ohne solche übersteigt das meine Kenntnisse (ich habe 'mal in einem Deiner Threads gelesen, dass Du ca. 65 Jahre alt bist, ich kann das leicht toppen: ich werde im nächsten Jahr 80 und da ist man nicht mehr so ganz auf der Höhe).

Nun, wie auch immer, ich habe Deine Angaben angepasst, Du betreibst openHAB sicherlich auf einem Raspi, ich aber auf einem MacMini und da ist die Ordnerstruktur etwas anders. Ich habe es aber hingebracht und Dein Vorschlag arbeitet (wie bei Dir nicht anders zu erwarten) ganz fabelhaft.

Ich sage ganz herzlichen Dank. Paul

KW.png

Re: Laufende Wochenzahl errechnen

Verfasst: 15. Sep 2021 22:54
von udo1toni
Wochentag vom 1.1.:

Code: Alles auswählen

val wd = now.withDayOfYear(1).dayOfWeek
Anzahl Wochen seit 1.1.:

Code: Alles auswählen

(now.dayOfYear()/7).intValue

Re: Laufende Wochenzahl errechnen

Verfasst: 18. Sep 2021 12:44
von peter-pan
PJH hat geschrieben: 15. Sep 2021 13:00 Vorschlag aus Antwort Nr. 6
Hallo Paul,
Entschuldigung für die späte Antwort, aber wir waren für ein paar Tage an der Ostsee und haben etwas Meerluft geschnuppert.

Aber wie ich sehen kann, hat dir Udo schon ein paar Tipps für die Berechnung gegeben.

Der Vorschlag von mir schien mir einfach der "Leichteste", der Möglichkeiten zu sein, ohne groß programmieren/scripten zu müssen.

In "unserem" Alter tut man sich halt einfach etwas schwerer mit "Neuem" bzw. "Ungewohntem", da OH2 und OH3, gerade was die Zeit-Funktionen anbelangt, doch etwas unterschiedlich "ticken".

Aber solange das Ganze noch Spass macht und es so tolle Moderatoren bzw. Community-Mitglieder wie Udo gibt, bleibt der Spass auch im "hohen" Alter noch erhalten.

Viele Grüsse aus dem Schwabenland
Peter

P.S.: Neben unserem Hobby (OH), haben wir auch noch zwei weitere Gemeinsamkeiten:

1. Rentner
2. Den gleichen Namenstag (29.6.)
:lol: :lol: :lol: ;) ;) ;)

Re: Laufende Wochenzahl errechnen

Verfasst: 18. Sep 2021 12:56
von PJH
@peter-pan

Hallo, ja, danke für die Info und das "Mutmachen".

"udo1toni"'s Tips, die in anderen Beiträgen ausgesprochen schätze, haben mir bisher nicht geholfen, da sie wohl mehr zum Nachdenken gedacht sind.

Ich habe 'mal den ersten getestet, aber "wd" mit den nachfolgenden Code wird nicht gefüllt, erhält keinen Wert.

Nun habe ich Deine Lösung und will auch eigentlich nicht mehr bis in alle Ewigkeit rumbasteln. Mal sehen, ob Deine Lösung am Montag noch funktioniert.

Danke und schöne Grüße (an alle). PJH

Re: Laufende Wochenzahl errechnen

Verfasst: 22. Sep 2021 19:07
von PJH
@udo1toni » 15. Sep 2021 22:54

Hallo, ich habe 'mal ein bisschen romprobiert (genau verstehe ich die Angaben ohnehin nicht), aber leider ohne Erfolg.

Kann es sein, dass die Angaben für OH2 gelten und nicht für OH3?

Ich bekomme z.B. die Meldung zurück "dayOfWeek" is not a member of javatime (oder so ähnlich).

Schöne Grüße. PJH

Re: Laufende Wochenzahl errechnen

Verfasst: 22. Sep 2021 19:57
von udo1toni
Eigentlich nicht. Könnte sein, dass es DayOfWeek heißen muss. Das mit Groß/Kleinschreibung kann echt nervig sein.

Eventuell gibt DayOfWeek auch einen String zurück, dann müsste man noch ein getValue ergänzen...

Ich habe leider im Moment nur wenig Zeit, das selbst auszuprobieren...

Re: Laufende Wochenzahl errechnen

Verfasst: 22. Sep 2021 21:09
von int5749
PJH hat geschrieben: 22. Sep 2021 19:07 Ich bekomme z.B. die Meldung zurück "dayOfWeek" is not a member of javatime (oder so ähnlich).
Ein bissi testen und google und der Teufel liegt im Detail ;)

Code: Alles auswählen

val wd = now.withDayOfYear(1).getDayOfWeek
logInfo("TEST", "Wochentag des 1.1.: {}", wd.toString)
Wochentag des 1.1.: FRIDAY

Code: Alles auswählen

logInfo("TEST", "Anzahl Wochen seit 1.1.: {}", (now.getDayOfYear()/7).intValue)
Anzahl Wochen seit 1.1.: 37

Re: Laufende Wochenzahl errechnen

Verfasst: 22. Sep 2021 21:16
von udo1toni
:)

Re: Laufende Wochenzahl errechnen

Verfasst: 23. Sep 2021 01:20
von peter-pan
...und noch ein paar Möglichkeiten den ersten und den letzten Tag eines Jahres zu bekommen:

Code: Alles auswählen

var vYear = now.getYear()
logInfo("test","Jahr ist: {}", vYear)

var vFirstDay = LocalDate.of(now.getYear(), 01, 01).getDayOfYear()
logInfo("test","der erste Tag ist: {}", vFirstDay)
  
var vFirstDay1Name = LocalDate.of(2020, 01, 01).dayOfWeek
logInfo("test","der erste Tag ist: {}", vFirstDay1Name)

var vLastDay1Name = LocalDate.of(2020, 12, 31).dayOfWeek
logInfo("test","der letzte Tag ist: {}", vLastDay1Name)
  
var vFirstDay1Number = LocalDate.of(2020, 01, 01).dayOfWeek.getValue
logInfo("test","der erste Tag ist: {}", vFirstDay1Number)

var vLastDay1Number = LocalDate.of(2020, 12, 31).dayOfWeek.getValue
logInfo("test","der letzte Tag ist: {}", vLastDay1Number)
  
vFirstDay1Name = LocalDate.of(now.getYear(), 01, 01).dayOfWeek
logInfo("test","der erste Tag ist: {}", vFirstDay1Name)

vLastDay1Name = LocalDate.of(now.getYear(), 12, 31).dayOfWeek
logInfo("test","der letzte Tag ist: {}", vLastDay1Name)
  
vFirstDay1Number = LocalDate.of(now.getYear(), 01, 01).dayOfWeek.getValue
logInfo("test","der erste Tag ist: {}", vFirstDay1Number)

vLastDay1Number = LocalDate.of(now.getYear(), 12, 31).dayOfWeek.getValue
logInfo("test","der letzte Tag ist: {}", vLastDay1Number)
Das Ergebnis sieht dann so aus:

Code: Alles auswählen

2021-09-23 01:14:53.476 [INFO ] [org.openhab.core.model.script.test  ] - Jahr ist: 2021
2021-09-23 01:14:53.482 [INFO ] [org.openhab.core.model.script.test  ] - der erste Tag ist: 1
2021-09-23 01:14:53.486 [INFO ] [org.openhab.core.model.script.test  ] - der erste Tag ist: WEDNESDAY
2021-09-23 01:14:53.492 [INFO ] [org.openhab.core.model.script.test  ] - der letzte Tag ist: THURSDAY
2021-09-23 01:14:53.497 [INFO ] [org.openhab.core.model.script.test  ] - der erste Tag ist: 3
2021-09-23 01:14:53.502 [INFO ] [org.openhab.core.model.script.test  ] - der letzte Tag ist: 4
2021-09-23 01:14:53.507 [INFO ] [org.openhab.core.model.script.test  ] - der erste Tag ist: FRIDAY
2021-09-23 01:14:53.513 [INFO ] [org.openhab.core.model.script.test  ] - der letzte Tag ist: FRIDAY
2021-09-23 01:14:53.518 [INFO ] [org.openhab.core.model.script.test  ] - der erste Tag ist: 5
2021-09-23 01:14:53.523 [INFO ] [org.openhab.core.model.script.test  ] - der letzte Tag ist: 5
Das Beispiel mit dem Jahr 2020 habe ich genommen, weil das ein Schaltjahr war.
:) ;)