Laufende Wochenzahl errechnen

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Benutzeravatar
udo1toni
Beiträge: 15264
Registriert: 11. Apr 2018 18:05
Answers: 245
Wohnort: Darmstadt

Re: Laufende Wochenzahl errechnen

Beitrag 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. :)
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

PJH
Beiträge: 135
Registriert: 23. Mai 2017 08:32
Answers: 0
Wohnort: Duisburg
Kontaktdaten:

Re: Laufende Wochenzahl errechnen

Beitrag 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
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
openHAB 4.3 im Synology NAS Docker-Container.

Benutzeravatar
udo1toni
Beiträge: 15264
Registriert: 11. Apr 2018 18:05
Answers: 245
Wohnort: Darmstadt

Re: Laufende Wochenzahl errechnen

Beitrag 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
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Benutzeravatar
peter-pan
Beiträge: 2767
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: Laufende Wochenzahl errechnen

Beitrag 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: ;) ;) ;)
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

PJH
Beiträge: 135
Registriert: 23. Mai 2017 08:32
Answers: 0
Wohnort: Duisburg
Kontaktdaten:

Re: Laufende Wochenzahl errechnen

Beitrag 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
openHAB 4.3 im Synology NAS Docker-Container.

PJH
Beiträge: 135
Registriert: 23. Mai 2017 08:32
Answers: 0
Wohnort: Duisburg
Kontaktdaten:

Re: Laufende Wochenzahl errechnen

Beitrag 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
openHAB 4.3 im Synology NAS Docker-Container.

Benutzeravatar
udo1toni
Beiträge: 15264
Registriert: 11. Apr 2018 18:05
Answers: 245
Wohnort: Darmstadt

Re: Laufende Wochenzahl errechnen

Beitrag 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...
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

int5749
Beiträge: 1173
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: Laufende Wochenzahl errechnen

Beitrag 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
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

Benutzeravatar
udo1toni
Beiträge: 15264
Registriert: 11. Apr 2018 18:05
Answers: 245
Wohnort: Darmstadt

Re: Laufende Wochenzahl errechnen

Beitrag von udo1toni »

:)
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Benutzeravatar
peter-pan
Beiträge: 2767
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: Laufende Wochenzahl errechnen

Beitrag 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.
:) ;)
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

Antworten