Laufende Wochenzahl errechnen
-
- Beiträge: 135
- Registriert: 23. Mai 2017 08:32
- Wohnort: Duisburg
- Kontaktdaten:
Re: Laufende Wochenzahl errechnen
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
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.
-
- Beiträge: 1173
- Registriert: 4. Nov 2019 22:08
Re: Laufende Wochenzahl errechnen
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
-
- Beiträge: 135
- Registriert: 23. Mai 2017 08:32
- Wohnort: Duisburg
- Kontaktdaten:
Re: Laufende Wochenzahl errechnen
@int5749
Das mache ich gerne, aber speziell welchen Code, nur für die Errechnung der Wochenzahl?
Und wohin? In diese Rubrik?
Gruß. PJH
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.
-
- Beiträge: 1173
- Registriert: 4. Nov 2019 22:08
Re: Laufende Wochenzahl errechnen
@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.
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
-
- Beiträge: 135
- Registriert: 23. Mai 2017 08:32
- Wohnort: Duisburg
- Kontaktdaten:
Re: Laufende Wochenzahl errechnen
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
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.
- udo1toni
- Beiträge: 15264
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Laufende Wochenzahl errechnen
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:
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.
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
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
-
- Beiträge: 135
- Registriert: 23. Mai 2017 08:32
- Wohnort: Duisburg
- Kontaktdaten:
Re: Laufende Wochenzahl errechnen
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
Schöne Grüße. PJH
openHAB 4.3 im Synology NAS Docker-Container.
- udo1toni
- Beiträge: 15264
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Laufende Wochenzahl errechnen
So, hat mir keine Ruhe gelassen...
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.
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
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
- udo1toni
- Beiträge: 15264
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Laufende Wochenzahl errechnen
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
-
- Beiträge: 135
- Registriert: 23. Mai 2017 08:32
- Wohnort: Duisburg
- Kontaktdaten:
Re: Laufende Wochenzahl errechnen
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^
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.