Laufende Wochenzahl errechnen

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

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

Re: Laufende Wochenzahl errechnen

Beitrag von PJH »

Hallo liebe Helfer,

da habt ihr euch ja mächtig in's Zeug gelegt.

Ja, die Lösung von int5749 funktioniert, zumindest zur Zeit.

Das ist eine Vereinfachung gegenüber der ersten Lösung von peter-pan, daher nehme ich diese.

Nochmals vielen Dank für die freundliche Hilfe. PJH
openHAB 4.3 im Synology NAS Docker-Container.

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

Re: Laufende Wochenzahl errechnen

Beitrag von int5749 »

PJH hat geschrieben: 23. Sep 2021 16:29 Ja, die Lösung von funktioniert, zumindest zur Zeit.
Hi PJH

evtl. postest Du mal den kompletten Code, falls noch jemand den Bedarf hat und das Rad nicht neu erfunden werden muss ;)

Viele Grüße
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

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

Re: Laufende Wochenzahl errechnen

Beitrag von PJH »

@int5749

Das mache ich gerne, aber speziell welchen Code, nur für die Errechnung der Wochenzahl?

Und wohin? In diese Rubrik?

Gruß. PJH
openHAB 4.3 im Synology NAS Docker-Container.

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

Re: Laufende Wochenzahl errechnen

Beitrag von int5749 »

@PJH
Den Code zur Errechnung der Wochenzahl und wenn Du es für sinnvoll erachtest auch gerne, wofür Du dies nutzt. Evtl. kann dann jemand dies für seine Zwecke als Input nutzen und abwandeln. Funktionierender Code ist immer gerne gesehen ;-)

Da es zu diesem Thema passt, gerne hier. Verschieben kann man zur Not immer noch.
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

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

Re: Laufende Wochenzahl errechnen

Beitrag von PJH »

Hallo, ich habe jetzt länger hier in dieser Sache nicht von mir hören lassen, der Grund: ich wollte den von "int5749" vorgeschlagenen Code eine Weile auf Funktionstauglichkeit über prüfen.

Leider funktioniert er doch nicht. Der Berechnungsvorgang ist eigentlich genau derselbe wie bei meiner ersten Berechnung (Tageszahl/7).

Manchmal haut's hin und manchmal nicht (siehe die diversen Beiträge).

Ich habe jetzt wieder die von "peter-pan" vorgeschlagene Lösung eingestellt. Sie ist zwar etwas umständlich, funktioniert aber.

Schöne Grüße. Paul-Joachim Haucke
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 »

Ja, da ist noch ein Fehler in der Formel, weil der 1.1. halt nicht Anfang der Woche ist.

Ich hatte jetzt gerade mal etwas Zeit, mich etwas intensiver damit zu beschäftigen. So sieht meine Lösung aus:

Code: Alles auswählen

val firstMonday=now.withDayOfYear(8).minusDays(now.withDayOfYear(1).getDayOfWeek)
val actualMonday=now.plusDays(7).minusDays(now.getDayOfWeek)
val weeks = ((actualMonday-firstMonday)/7).intValue + if(firstMonday.getDayOfYear > 3) 1 else 0
Es fehlt aber noch Code für die Sonderfälle.
In der ersten Zeile wird das Datum des ersten Montags im Jahr bestimmt.
In der zweiten Zeile wird das Datum des Montags in der laufenden Woche bestimmt.
In der dritten Zeile werden die beiden Daten voneinander abgezogen und durch 7 geteilt. Eventuell muss man hier zunächst auf Tage umrechnen, ich habe das jetzt nur in Excel durchgespielt. .intValue ist eigentlich nicht nötig, da immer eine durch 7 teilbare Zahl entstehen sollte, aber das Ergebnis wäre halt kein Integer mehr. Der ternäre Operator zählt eins dazu, falls das Jahr mit Montag bis Donnerstag beginnt.

Abzufangen wäre noch die KW 0 (die muss aus dem Vorjahr berechnet werden, entweder 52 oder 53) und die KW 53, die nur dann 53 sein darf, wenn das Nachfolgejahr mit KW 0 beginnt, ansonsten muss es KW 1 (des Nachfolgejahres) sein.

Der eigentliche Punkt in der Berechnung ist, dass man zunächst dafür sorgt, dass man überall mit dem gleichen Wochentag rechnet, also hier mit Montag.
Vermutlich muss man now auch noch auf 0:00:00 Uhr schieben. (now.with(LocalTime.MIDNIGHT).withDayOfYear...).

Ich habe die Berechnung nicht in openHAB getestet, aber in Excel stimmt es so. Sollte die Berechnung so nicht funktionieren, könnte man auch jeweils den Tag des Jahres ausrechnen und diesen in der Subtraktion nutzen.
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 »

Hallo udo1toni, danke für die Mühe, aber ist es da die Lösung von "peter-pan" nicht doch noch einfacher?

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 »

So, hat mir keine Ruhe gelassen...

Code: Alles auswählen

val  firstMonday = now.with(LocalTime.MIDNIGHT).withDayOfYear(8).minusDays(now.withDayOfYear(1).getDayOfWeek).getDayOfYear
val actualMonday = now.with(LocalTime.MIDNIGHT).plusDays(7).minusDays(now.getDayOfWeek).getDayOfYear
var        weeks = ((actualMonday-firstMonday)/7).intValue + if(firstMonday > 3) 1 else 0
if(weeks == 0)
    weeks = if(firstMonday == 3) 53 else 52
else if (weeks == 53)
    if(now.with(LocalTime.MIDNIGHT).plusDays(14).minusDays(now.getDayOfWeek).getDayOfYear > 3)
        weeks = 1
Der Code nutzt nun Mitternacht und geht gleich auf den Tag des Jahres, das ist ein Integer Wert, damit müsste die BErechnung dann auf jeden Fall funktionieren.
Das erste If setzt statt der 0 eine 53 oder 52, je nach dem 1. Montag (der liegt ja schon vor...)
das else betrachtet die letzten Tage des Jahres und bestimmt dazu den 1. Montag im nächsten Jahr. liegt dieser nach dem 3., so ist die 53. Woche in Wirklichkeit die 1. Woche des Folgejahres.
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

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

Re: Laufende Wochenzahl errechnen

Beitrag von udo1toni »

PJH hat geschrieben: 4. Okt 2021 11:57 Hallo udo1toni, danke für die Mühe, aber ist es da die Lösung von "peter-pan" nicht doch noch einfacher?

Schöne Grüße. PJH
Bei aller Liebe, es geht nicht nur darum, es möglichst einfach umzusetzen, sondern vor allem korrekt.

Die einfache Lösung wäre eine entsprechende Funktion now.getISOWeekOfYear, die aber leider nicht zur Verfügung steht.
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 »

Also, "udo1toni", bei der Mühe (und Raffinesse)werde ich das auf jeden Fall benutzen.

Ich werde berichten. Einstweilen, vielen Dank.

PS: Warum die Funktion wohl nicht implementiert ist?

Schöne Grüße. Paul-Joachim Haucke^
openHAB 4.3 im Synology NAS Docker-Container.

Antworten