Meine dumme Frage zum Jahresende: Anzahl der Kalenderwochen im Kalenderjahr. – SELFHTML-Forum Forum als Ergänzung zum SELFHTML-Wiki und zur Dokumentation SELFHTML https://forum.selfhtml.org/self Meine dumme Frage zum Jahresende: Anzahl der Kalenderwochen im Kalenderjahr. Thu, 30 Nov 17 18:38:14 Z https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709426#m1709426 https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709426#m1709426 <p>Hello,</p> <p>tut mir leid, wenn ich hier als Erster die dumme Frage zum Jahresende absende.<br> (Weitere sind durchaus möglich, auch von Anderen :-P )</p> <p>Kann mir bitte nochmal jemand erklären, wie das mit den Kalenderwochen war? Wie berechnet und bestimmt sich das mit der Anzahl der KW im Jahr?</p> <p>2018 ist der letzte Tag im Jahr ja ein Montag und gehört eigentlich zur 53. Kalenderwoche 2018. 2018 hat aber, soweit ich das bisher sehen konnte, nur 52 KW, und der Montag, 31.12.2018 gehört schon zur ersten KW 2019.</p> <p>Wie ist da die Regel?</p> <p>Liebe Grüße<br> Tom S.</p> <div class="signature">-- <br> Es gibt nichts Gutes, außer man tut es!<br> Das Leben selbst ist der Sinn.<br> </div> Meine dumme Frage zum Jahresende: Anzahl der Kalenderwochen im Kalenderjahr. Thu, 30 Nov 17 19:11:13 Z https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709427#m1709427 https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709427#m1709427 <p>Hallo TS,</p> <p><a href="https://de.wikipedia.org/wiki/Woche#Kalenderwoche" rel="nofollow noopener noreferrer">https://de.wikipedia.org/wiki/Woche#Kalenderwoche</a></p> <p>Bis demnächst<br> Matthias</p> <div class="signature">-- <br> Rosen sind rot. </div> Meine dumme Frage zum Jahresende: Anzahl der Kalenderwochen im Kalenderjahr. Thu, 30 Nov 17 19:21:40 Z https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709428#m1709428 https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709428#m1709428 <blockquote> <p>Kann mir bitte nochmal jemand erklären, wie das mit den Kalenderwochen war? Wie berechnet und bestimmt sich das mit der Anzahl der KW im Jahr?</p> </blockquote> <p>Hängt vom verwendeten System ab; z.B. ist die erste Kalenderwoche, die die den 4. Januar enthält (Woche beginnt Montags) oder am 1. Januar startet die erste Kalenderwoche (alle anderen Wochen starten Sonntags, 1. und letzte 33./34. Woche sind potentiell kürzer als die anderen) oder Woche beginnt Sonntags und die erste Woche ist die, die den 1. Januar enthält oder die erste Woche im neuen Jahr, die vollständig ist. Alternativ könnte man auch das sinnvollste System verwenden, in dem jedes Jahr an einem Sweetmorn beginnt, die erste Woche am ersten Holyday des Jahres Mungtag, der ein Setting Orange ist, endet, und das Jahr mit dem 73. Setting Orange bzw. 73. The Aftermath endet.</p> Meine dumme Frage zum Jahresende: Anzahl der Kalenderwochen im Kalenderjahr. Sun, 03 Dec 17 11:35:40 Z https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709535#m1709535 https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709535#m1709535 <p>Hi Tom,</p> <p>nun, den Weg zur Regel nach ehem. DIN1355 kennst Du ja jetzt. Damit ist die Berechnung der KW kein Hexenei, aber ich stelle gerade fest, daß in meiner Lib auch noch eine MEthode fehlt welche die Tage für eine bestimmte KW/Jahr ermittelt -- Damit hast Du meinen Sonntag gerettet </p> <p>MfG</p> Meine dumme Frage zum Jahresende: Anzahl der Kalenderwochen im Kalenderjahr. Thu, 30 Nov 17 19:30:12 Z https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709429#m1709429 https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709429#m1709429 <p>Hello,</p> <blockquote> <p><a href="https://de.wikipedia.org/wiki/Woche#Kalenderwoche" rel="nofollow noopener noreferrer">https://de.wikipedia.org/wiki/Woche#Kalenderwoche</a></p> </blockquote> <p>jetzt weiß ich alles :-O</p> <p>Glaub ja nicht, dass ich das heute noch verstehe in meinem betagten Alter und dem vorangeschrittenen Alkoholgenuss.</p> <p>Ich muss die Sch.... programmieren für eine MySQL-Benutzer-Funktion für den gesamten europäischen Raum. Ist Europa (auch die Anrainer der EU) sich zumindest in diesem Punkte einig?</p> <p>Liebe Grüße<br> Tom S.</p> <div class="signature">-- <br> Es gibt nichts Gutes, außer man tut es!<br> Das Leben selbst ist der Sinn.<br> </div> Meine dumme Frage zum Jahresende: Anzahl der Kalenderwochen im Kalenderjahr. Thu, 30 Nov 17 19:40:32 Z https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709430#m1709430 https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709430#m1709430 <p>Tach!</p> <blockquote> <p>Ich muss die Sch.... programmieren für eine MySQL-Benutzer-Funktion</p> </blockquote> <p><code>SELECT WEEKOFYEAR(date)</code> - Fertig!</p> <blockquote> <p>für den gesamten europäischen Raum. Ist Europa (auch die Anrainer der EU) sich zumindest in diesem Punkte einig?</p> </blockquote> <p>Die Frage klärt <a href="https://en.wikipedia.org/wiki/Week#Week_numbering" rel="nofollow noopener noreferrer">das englische Pendant zur bereits verlinkten Wikiseite</a>.</p> <p>dedlfix.</p> Meine dumme Frage zum Jahresende: Anzahl der Kalenderwochen im Kalenderjahr. Sat, 02 Dec 17 14:41:36 Z https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709515#m1709515 https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709515#m1709515 <blockquote> <p>Ist Europa (auch die Anrainer der EU) sich zumindest in diesem Punkte einig?</p> </blockquote> <p>Damit deine Motivation nicht überschlägt, ist es sicher dass die Definition "was ist eine Woche" überhaupt gleich ist? Also mit welchem Tag beginnt sie.</p> <p>Ich würde am besten sowohl den ersten Tag der Woche, als auch die Berechnung der Kalenderwochen variabel d.h. konfigurierbar halten. Lieber gleich dran denken als später alles ändern müssen.</p> Meine dumme Frage zum Jahresende: Anzahl der Kalenderwochen im Kalenderjahr. Sat, 02 Dec 17 20:42:42 Z https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709521#m1709521 https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709521#m1709521 <p>Hello,</p> <blockquote> <p>Ich würde am besten sowohl den ersten Tag der Woche, als auch die Berechnung der Kalenderwochen variabel d.h. konfigurierbar halten. Lieber gleich dran denken als später alles ändern müssen.</p> </blockquote> <p>Danke. Guter Hinweis!</p> <p>Das könnte tatsächlich sein, dass die von Dedlfix verlinkte Funktion das nicht leistet. Muss ich tatsächlich zuerst mal überprüfen ;-O</p> <p>Liebe Grüße<br> Tom S.</p> <div class="signature">-- <br> Es gibt nichts Gutes, außer man tut es!<br> Das Leben selbst ist der Sinn.<br> </div> Meine dumme Frage zum Jahresende: Anzahl der Kalenderwochen im Kalenderjahr. Sat, 02 Dec 17 20:50:15 Z https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709522#m1709522 https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709522#m1709522 <p>Tach!</p> <blockquote> <p>Das könnte tatsächlich sein, dass die von Dedlfix verlinkte Funktion das nicht leistet. Muss ich tatsächlich zuerst mal überprüfen ;-O</p> </blockquote> <p>Die leistet genau das, was wir hier haben. Es gibt aber auch eine andere Funktion mit ähnlichem Namen, mit der kann man die Ergebnisse für die anderen Kombinationen erfragen.</p> <p>dedlfix.</p> Meine dumme Frage zum Jahresende: Anzahl der Kalenderwochen im Kalenderjahr. Sun, 03 Dec 17 16:17:49 Z https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709541#m1709541 https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709541#m1709541 <p>Hi Tom,</p> <blockquote> <p>nun, den Weg zur Regel nach ehem. DIN1355 kennst Du ja jetzt. Damit ist die Berechnung der KW kein Hexenei, aber ich stelle gerade fest, daß in meiner Lib auch noch eine MEthode fehlt welche die Tage für eine bestimmte KW/Jahr ermittelt -- Damit hast Du meinen Sonntag gerettet </p> </blockquote> <p><a href="http://rolfrost.de/daysinkw.html?year=2019&week=1&find=1" rel="nofollow noopener noreferrer">Ooops, fertig</a> </p> <p>Schönen 1. Advent Euch allen!</p> Meine dumme Frage zum Jahresende: Anzahl der Kalenderwochen im Kalenderjahr. Sun, 03 Dec 17 17:03:49 Z https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709542#m1709542 https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709542#m1709542 <p>Hallo pl,</p> <blockquote> <p><a href="http://rolfrost.de/daysinkw.html?year=2019&week=1&find=1" rel="nofollow noopener noreferrer">Ooops, fertig</a> </p> </blockquote> <p>Deine Wochen haben nur 6 Tage.</p> <p>Bis demnächst<br> Matthias</p> <div class="signature">-- <br> Rosen sind rot. </div> Meine dumme Frage zum Jahresende: Anzahl der Kalenderwochen im Kalenderjahr. Sun, 03 Dec 17 17:40:59 Z https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709543#m1709543 https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709543#m1709543 <p>Hallo Matthias,</p> <blockquote> <blockquote> <p><a href="http://rolfrost.de/daysinkw.html?year=2019&week=1&find=1" rel="nofollow noopener noreferrer">Ooops, fertig</a> </p> </blockquote> <p>Deine Wochen haben nur 6 Tage.</p> </blockquote> <p>Ach Du Scheise </p> <pre><code class="block language-perl"> <span class="token keyword">my</span> <span class="token variable">$fst</span> <span class="token operator">=</span> <span class="token variable">$self</span><span class="token operator">-></span>_firstkwjd<span class="token punctuation">(</span><span class="token variable">$year</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token punctuation">(</span><span class="token variable">$kw</span> <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">7</span><span class="token punctuation">;</span> <span class="token punctuation">(</span><span class="token variable">$fst</span><span class="token punctuation">,</span> <span class="token variable">$fst</span><span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token variable">$fst</span><span class="token operator">+</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token variable">$fst</span><span class="token operator">+</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token variable">$fst</span><span class="token operator">+</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token variable">$fst</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span> <span class="token variable">$fst</span><span class="token operator">+</span><span class="token number">6</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>Da hat <code>$fst+4</code> gefehlt .. naja, ich sehe das nicht mehr so richtig. Herzlichen Dank!!</p> <p>Weiterhin schönen Advent </p> Meine dumme Frage zum Jahresende: Anzahl der Kalenderwochen im Kalenderjahr. Mon, 04 Dec 17 09:54:12 Z https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709579#m1709579 https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709579#m1709579 <blockquote> <pre><code class="block language-perl"><span class="token punctuation">(</span><span class="token variable">$fst</span><span class="token punctuation">,</span> <span class="token variable">$fst</span><span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token variable">$fst</span><span class="token operator">+</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token variable">$fst</span><span class="token operator">+</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token variable">$fst</span><span class="token operator">+</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token variable">$fst</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span> <span class="token variable">$fst</span><span class="token operator">+</span><span class="token number">6</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> </blockquote> <blockquote> <p>Da hat $fst+4 gefehlt</p> </blockquote> <p>Ich habe mal vor fernen Tagen gehört, dass man auch deshalb sowas in for-Schleifen verbaut...</p> Meine dumme Frage zum Jahresende: Anzahl der Kalenderwochen im Kalenderjahr. Mon, 04 Dec 17 10:01:54 Z https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709581#m1709581 https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709581#m1709581 <blockquote> <blockquote> <pre><code class="block language-perl"><span class="token punctuation">(</span><span class="token variable">$fst</span><span class="token punctuation">,</span> <span class="token variable">$fst</span><span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token variable">$fst</span><span class="token operator">+</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token variable">$fst</span><span class="token operator">+</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token variable">$fst</span><span class="token operator">+</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token variable">$fst</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span> <span class="token variable">$fst</span><span class="token operator">+</span><span class="token number">6</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> </blockquote> <blockquote> <p>Da hat $fst+4 gefehlt</p> </blockquote> <p>Ich habe mal vor fernen Tagen gehört, dass man auch deshalb sowas in for-Schleifen verbaut...</p> </blockquote> <p>Ja Genau das war ja mein Fehler </p> <p>Der Algorithmus zur Berechnung der Kalenderwoche nach DIN1355 ist übrigens ganz einfach. Man braucht den $jd (Julianischer Tag) und den $wd (numerischer Wochentag) zum 1.1. eines Jahres.</p> <p>Die Rechnung ist dann wie folgt:</p> <pre><code class="block language-perl"> <span class="token comment"># map(wd)</span> <span class="token keyword">my</span> <span class="token variable">%swd</span> <span class="token operator">=</span> <span class="token punctuation">(</span> <span class="token number">0</span> <span class="token operator">=></span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span> <span class="token operator">=></span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">2</span> <span class="token operator">=></span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">3</span> <span class="token operator">=></span> <span class="token operator">-</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">4</span> <span class="token operator">=></span> <span class="token operator">-</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">5</span> <span class="token operator">=></span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">6</span> <span class="token operator">=></span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">7</span> <span class="token operator">=></span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token punctuation">(</span><span class="token variable">$jd</span> <span class="token operator">+</span> <span class="token variable">$swd</span><span class="token punctuation">{</span><span class="token variable">$wd</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>Der Return ist also der Julianische Tag für den Montag der 1. Kalenderwoche eines Jahres die auch mal in das vorherige Jahr fallen kann. Mit diesem Tag kann man alles Weitere berechnen. So einfach sieht also DIN1355 (ISO/R 2015-1971) (deutsch) in Perl aus </p> <p>MfG</p> Meine dumme Frage zum Jahresende: Anzahl der Kalenderwochen im Kalenderjahr. Tue, 05 Dec 17 07:14:19 Z https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709633#m1709633 https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709633#m1709633 <blockquote> <blockquote> <pre><code class="block language-perl"><span class="token punctuation">(</span><span class="token variable">$fst</span><span class="token punctuation">,</span> <span class="token variable">$fst</span><span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token variable">$fst</span><span class="token operator">+</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token variable">$fst</span><span class="token operator">+</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token variable">$fst</span><span class="token operator">+</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token variable">$fst</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span> <span class="token variable">$fst</span><span class="token operator">+</span><span class="token number">6</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> </blockquote> <blockquote> <p>Da hat $fst+4 gefehlt</p> </blockquote> <p>Ich habe mal vor fernen Tagen gehört, dass man auch deshalb sowas in for-Schleifen verbaut...</p> </blockquote> <p>map wäre hier zweckmäßiger:</p> <p><code>@days = map{ $fst + $_ }( 0..6 );</code></p> <p>und noch ein Tipp lieber Kollege, mach Übergaben in Funktionen namentlich, am besten so:</p> <pre><code class="block language-perl"><span class="token keyword">sub</span> <span class="token function">foo</span><span class="token punctuation">{</span> <span class="token keyword">my</span> <span class="token variable">$self</span> <span class="token operator">=</span> shift<span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">$day</span> <span class="token operator">=</span> shift<span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">$year</span> <span class="token operator">=</span> shift <span class="token operator">||</span> <span class="token variable">$self</span><span class="token operator">-></span><span class="token punctuation">{</span>year<span class="token punctuation">}</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment"># oder als hash</span> <span class="token keyword">sub</span> <span class="token function">foo</span><span class="token punctuation">{</span> <span class="token keyword">my</span> <span class="token variable">$self</span> <span class="token operator">=</span> shift<span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">%date</span> <span class="token operator">=</span> <span class="token punctuation">(</span> year <span class="token operator">=></span> <span class="token number">1984</span><span class="token punctuation">,</span> day <span class="token operator">=></span> <span class="token number">1</span><span class="token punctuation">,</span> month <span class="token operator">=></span> <span class="token string">''</span> <span class="token variable">@_</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> <p>so bleibt die Übersicht und Du kannst ggf. auch Default Werte setzen, s.o. MfG</p> Meine dumme Frage zum Jahresende: Anzahl der Kalenderwochen im Kalenderjahr. Mon, 04 Dec 17 11:34:28 Z https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709588#m1709588 https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709588#m1709588 <blockquote> <pre><code class="block language-perl"> <span class="token comment"># map(wd)</span> <span class="token keyword">my</span> <span class="token variable">%swd</span> <span class="token operator">=</span> <span class="token punctuation">(</span> <span class="token number">0</span> <span class="token operator">=></span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span> <span class="token operator">=></span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">2</span> <span class="token operator">=></span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">3</span> <span class="token operator">=></span> <span class="token operator">-</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">4</span> <span class="token operator">=></span> <span class="token operator">-</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">5</span> <span class="token operator">=></span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">6</span> <span class="token operator">=></span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">7</span> <span class="token operator">=></span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token punctuation">(</span><span class="token variable">$jd</span> <span class="token operator">+</span> <span class="token variable">$swd</span><span class="token punctuation">{</span><span class="token variable">$wd</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>So einfach sieht also DIN1355 (ISO/R 2015-1971) (deutsch) in Perl aus </p> </blockquote> <p>Naja. Wenn es um "einfach" geht, dann würde ich</p> <pre><code class="block language-perl"><span class="token keyword">my</span> <span class="token variable">@swd</span> <span class="token operator">=</span> <span class="token punctuation">(</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">1</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token variable">$jd</span> <span class="token operator">+</span> <span class="token variable">$swd</span><span class="token punctuation">[</span><span class="token variable">$wd</span><span class="token punctuation">]</span> </code></pre> <p>vorziehen.</p> <p>Andere nennen noch kürzeres "einfach":</p> <pre><code class="block language-perl"><span class="token keyword">return</span> <span class="token variable">$jd</span> <span class="token operator">+</span> <span class="token punctuation">(</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">1</span> <span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token variable">$wd</span><span class="token punctuation">]</span><span class="token punctuation">;</span> </code></pre> Meine dumme Frage zum Jahresende: Anzahl der Kalenderwochen im Kalenderjahr. Mon, 04 Dec 17 12:29:41 Z https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709590#m1709590 https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709590#m1709590 <blockquote> <blockquote> <pre><code class="block language-perl"> <span class="token comment"># map(wd)</span> <span class="token keyword">my</span> <span class="token variable">%swd</span> <span class="token operator">=</span> <span class="token punctuation">(</span> <span class="token number">0</span> <span class="token operator">=></span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span> <span class="token operator">=></span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">2</span> <span class="token operator">=></span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">3</span> <span class="token operator">=></span> <span class="token operator">-</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">4</span> <span class="token operator">=></span> <span class="token operator">-</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">5</span> <span class="token operator">=></span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">6</span> <span class="token operator">=></span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">7</span> <span class="token operator">=></span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token punctuation">(</span><span class="token variable">$jd</span> <span class="token operator">+</span> <span class="token variable">$swd</span><span class="token punctuation">{</span><span class="token variable">$wd</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>So einfach sieht also DIN1355 (ISO/R 2015-1971) (deutsch) in Perl aus </p> </blockquote> <p>Naja. Wenn es um "einfach" geht, dann würde ich</p> <pre><code class="block language-perl"><span class="token keyword">my</span> <span class="token variable">@swd</span> <span class="token operator">=</span> <span class="token punctuation">(</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">1</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token variable">$jd</span> <span class="token operator">+</span> <span class="token variable">$swd</span><span class="token punctuation">[</span><span class="token variable">$wd</span><span class="token punctuation">]</span> </code></pre> <p>vorziehen.</p> </blockquote> <p>Ja sicher kann man hier auch den unsichtbaren Index eines Arrays verwenden, wenn der Schlüssel eben numerisch ist. I.d.R. jedoch bevorzuge ich eine namentliche Adressierung weil das besser lesbar ist. Und äquivalent zu:</p> <pre><code class="block language-perl"><span class="token comment"># Fall Wochentag 1.1.</span> <span class="token keyword">my</span> <span class="token variable">%cwd</span> <span class="token operator">=</span> <span class="token punctuation">(</span> Montag <span class="token operator">=></span> <span class="token number">0</span><span class="token punctuation">,</span> Dienstag <span class="token operator">=></span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> Mittwoch <span class="token operator">=></span> <span class="token operator">-</span><span class="token number">2</span><span class="token punctuation">,</span> Donnerstag <span class="token operator">=></span> <span class="token operator">-</span><span class="token number">3</span><span class="token punctuation">,</span> Freitag <span class="token operator">=></span> <span class="token number">3</span><span class="token punctuation">,</span> Samstag <span class="token operator">=></span> <span class="token number">2</span><span class="token punctuation">,</span> Sonntag <span class="token operator">=></span> <span class="token number">1</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>Damit man das auch nach Jahren nachvollziehen kann </p> <p>Dieser quasi Switch implementiert aber nur eine der in DIN1355 gefassten Bedingungen, den Beginn der Wochenzählung. Die zweite Bedingung, nämlich wieviele KWs ein Jahr hat, ist nicht minder wichtig. MfG</p> <p>PS: Wenn man sieht was manchmal an entsetzlich wenig Code nach tagelanger Überlegung rauskommt, kann man echte Zweifel am Stundensatz bekommen </p> Meine dumme Frage zum Jahresende: Anzahl der Kalenderwochen im Kalenderjahr. Mon, 04 Dec 17 16:17:43 Z https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709616#m1709616 https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709616#m1709616 <blockquote> <p>Die zweite Bedingung, nämlich wieviele KWs ein Jahr hat,</p> </blockquote> <p>Wenn der 1.1 und der 31.12. auf einen Donnerstag fallen hat das Jahr 53 Wochen, sonst stets 52.</p> <p>Für den Rest gilt: Perlianer sollten einfach nicht mit Datums- und Zeitangaben rechnen. Irgendwie wurde Perl nicht dafür gemacht. So entstand auch das Jahr-2000-Problem.</p> <pre><code class="block language-perl"><span class="token comment">#!/usr/bin/perl -W</span> <span class="token keyword">use</span> POSIX<span class="token punctuation">;</span> <span class="token keyword">for</span> <span class="token punctuation">(</span> <span class="token variable">$i</span><span class="token operator">=</span><span class="token number">2000</span><span class="token punctuation">;</span> <span class="token variable">$i</span><span class="token operator"><</span><span class="token number">2100</span><span class="token punctuation">;</span> <span class="token variable">$i</span><span class="token operator">++</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">print</span> <span class="token punctuation">(</span> <span class="token variable">$i</span><span class="token punctuation">,</span> <span class="token string">" : "</span><span class="token punctuation">,</span> getWeeksOfYear<span class="token punctuation">(</span><span class="token variable">$i</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"\n"</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> exit<span class="token punctuation">;</span> <span class="token keyword">sub</span> <span class="token function">getWeekdayFromYMD</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> strftime<span class="token punctuation">(</span> <span class="token string">'%w'</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token variable">$_</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token variable">$_</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token variable">$_</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token operator">-</span><span class="token number">1900</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">sub</span> <span class="token function">getWeeksOfYear</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> <span class="token number">4</span> <span class="token operator">==</span> getWeekdayFromYMD<span class="token punctuation">(</span> <span class="token variable">$_</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token number">1</span> <span class="token punctuation">,</span> <span class="token number">1</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token operator">and</span> <span class="token punctuation">(</span> <span class="token number">4</span> <span class="token operator">==</span> getWeekdayFromYMD<span class="token punctuation">(</span> <span class="token variable">$_</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token number">12</span><span class="token punctuation">,</span> <span class="token number">31</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token number">53</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token number">52</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </code></pre> Meine dumme Frage zum Jahresende: Anzahl der Kalenderwochen im Kalenderjahr. Mon, 04 Dec 17 16:31:48 Z https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709617#m1709617 https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709617#m1709617 <p>Dein Code wirft für das Jahr 2004 => 52 Wochen. <a href="http://rolfrost.de/jahr.html?year=2004" rel="nofollow noopener noreferrer">2004 hat aber 53 Wochen</a> weil es an einem Donnerstag beginnt. DIN1355 sagt Beginn oder Ende am Donnerstag (nicht und).. Dein Code rechnet also nicht richtig. Mach aus dem und ein oder dann stimmts </p> <p>Wo siehst Du ein Jahr-2000-Problem?</p> <p>Bis dann </p> Meine dumme Frage zum Jahresende: Anzahl der Kalenderwochen im Kalenderjahr. Mon, 04 Dec 17 19:49:33 Z https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709627#m1709627 https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709627#m1709627 <p>Hallo Regina Schaukrug,</p> <blockquote> <p>Wenn der 1.1 und der 31.12. auf einen Donnerstag fallen hat das Jahr 53 Wochen, sonst stets 52.</p> </blockquote> <p>In jedem Gemeinjahr fallen Neujahr und Silvester auf denselben Wochentag. </p> <p>Bis demnächst<br> Matthias</p> <div class="signature">-- <br> Rosen sind rot. </div> KW ein kleines Perl Module Tue, 05 Dec 17 16:23:16 Z https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709643#m1709643 https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709643#m1709643 <p>mit POSIX</p> <pre><code class="block language-perl"><span class="token keyword">package</span> KW<span class="token punctuation">;</span> <span class="token keyword">use</span> POSIX<span class="token punctuation">;</span> <span class="token keyword">use</span> strict<span class="token punctuation">;</span> <span class="token keyword">use</span> warnings<span class="token punctuation">;</span> <span class="token comment"># Wochentag numerisch {num}, </span> <span class="token comment"># abgekürzt{abb}, voll{full}</span> <span class="token keyword">sub</span> <span class="token function">wd</span><span class="token punctuation">{</span> <span class="token keyword">my</span> <span class="token variable">$self</span> <span class="token operator">=</span> shift<span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">$day</span> <span class="token operator">=</span> shift<span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">$month</span> <span class="token operator">=</span> shift<span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">$year</span> <span class="token operator">=</span> shift<span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">%hunt</span> <span class="token operator">=</span> split <span class="token regex">/\s+/</span><span class="token punctuation">,</span> strftime<span class="token punctuation">(</span> <span class="token string">'num %w abb %a full %A'</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token variable">$day</span><span class="token punctuation">,</span> <span class="token variable">$month</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token variable">$year</span><span class="token operator">-</span><span class="token number">1900</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token operator">\</span><span class="token variable">%hunt</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment"># Wieviele Wochen hat ein Jahr</span> <span class="token keyword">sub</span> <span class="token function">weeks_in_year</span><span class="token punctuation">{</span> <span class="token keyword">my</span> <span class="token variable">$self</span> <span class="token operator">=</span> shift<span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">$year</span> <span class="token operator">=</span> shift<span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token variable">$self</span><span class="token operator">-></span>wd<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token variable">$year</span><span class="token punctuation">)</span><span class="token operator">-></span><span class="token punctuation">{</span>num<span class="token punctuation">}</span> <span class="token operator">==</span> <span class="token number">4</span> <span class="token operator">||</span> <span class="token variable">$self</span><span class="token operator">-></span>wd<span class="token punctuation">(</span><span class="token number">31</span><span class="token punctuation">,</span><span class="token number">12</span><span class="token punctuation">,</span><span class="token variable">$year</span><span class="token punctuation">)</span><span class="token operator">-></span><span class="token punctuation">{</span>num<span class="token punctuation">}</span> <span class="token operator">==</span> <span class="token number">4</span> <span class="token operator">?</span> <span class="token number">53</span> <span class="token punctuation">:</span> <span class="token number">52</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment"># Datum für Montag in erster KW eines Jahres</span> <span class="token keyword">sub</span> <span class="token function">first</span><span class="token punctuation">{</span> <span class="token keyword">my</span> <span class="token variable">$self</span> <span class="token operator">=</span> shift<span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">$year</span> <span class="token operator">=</span> shift<span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">%cwd</span> <span class="token operator">=</span> <span class="token punctuation">(</span> <span class="token number">0</span> <span class="token operator">=></span> sprintf<span class="token punctuation">(</span><span class="token string">"02.01.%d"</span><span class="token punctuation">,</span> <span class="token variable">$year</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">1</span> <span class="token operator">=></span> sprintf<span class="token punctuation">(</span><span class="token string">"01.01.%d"</span><span class="token punctuation">,</span> <span class="token variable">$year</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">2</span> <span class="token operator">=></span> sprintf<span class="token punctuation">(</span><span class="token string">"31.12.%d"</span><span class="token punctuation">,</span> <span class="token variable">$year</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">3</span> <span class="token operator">=></span> sprintf<span class="token punctuation">(</span><span class="token string">"30.12.%d"</span><span class="token punctuation">,</span> <span class="token variable">$year</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">4</span> <span class="token operator">=></span> sprintf<span class="token punctuation">(</span><span class="token string">"29.12.%d"</span><span class="token punctuation">,</span> <span class="token variable">$year</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">5</span> <span class="token operator">=></span> sprintf<span class="token punctuation">(</span><span class="token string">"04.01.%d"</span><span class="token punctuation">,</span> <span class="token variable">$year</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">6</span> <span class="token operator">=></span> sprintf<span class="token punctuation">(</span><span class="token string">"03.01.%d"</span><span class="token punctuation">,</span> <span class="token variable">$year</span><span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$cwd</span><span class="token punctuation">{</span><span class="token variable">$self</span><span class="token operator">-></span>wd<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token variable">$year</span><span class="token punctuation">)</span><span class="token operator">-></span><span class="token punctuation">{</span>num<span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token number">1</span><span class="token punctuation">;</span> <span class="token keyword">print</span> KW<span class="token operator">-></span>first<span class="token punctuation">(</span><span class="token number">2027</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>Viel Spaß damit</p> Meine dumme Frage zum Jahresende: Anzahl der Kalenderwochen im Kalenderjahr. Tue, 05 Dec 17 09:39:52 Z https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709638#m1709638 https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709638#m1709638 <blockquote> <p>Mach aus dem und ein oder dann stimmts </p> </blockquote> <p>Ihr Habt beide recht. Ich hab bei Wikipedia zu schnell gelesen. Da steht "oder".</p> <pre><code class="block language-perl"><span class="token comment">#!/usr/bin/perl -W</span> <span class="token keyword">use</span> POSIX<span class="token punctuation">;</span> <span class="token keyword">for</span> <span class="token punctuation">(</span> <span class="token variable">$i</span><span class="token operator">=</span><span class="token number">2000</span><span class="token punctuation">;</span> <span class="token variable">$i</span><span class="token operator"><</span><span class="token number">2100</span><span class="token punctuation">;</span> <span class="token variable">$i</span><span class="token operator">++</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">print</span> <span class="token punctuation">(</span> <span class="token variable">$i</span><span class="token punctuation">,</span> <span class="token string">" : "</span><span class="token punctuation">,</span> getWeeksOfYear<span class="token punctuation">(</span><span class="token variable">$i</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"\n"</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> exit<span class="token punctuation">;</span> <span class="token keyword">sub</span> <span class="token function">getWeekdayFromYMD</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> strftime<span class="token punctuation">(</span> <span class="token string">'%w'</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token variable">$_</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token variable">$_</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token variable">$_</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token operator">-</span><span class="token number">1900</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">sub</span> <span class="token function">getWeeksOfYear</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> <span class="token number">4</span> <span class="token operator">==</span> getWeekdayFromYMD<span class="token punctuation">(</span> <span class="token variable">$_</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token number">1</span> <span class="token punctuation">,</span> <span class="token number">1</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token operator">or</span> <span class="token punctuation">(</span> <span class="token number">4</span> <span class="token operator">==</span> getWeekdayFromYMD<span class="token punctuation">(</span> <span class="token variable">$_</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token number">12</span><span class="token punctuation">,</span> <span class="token number">31</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token number">53</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token number">52</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </code></pre> <p>So. jetzt stimmts.</p> <blockquote> <p>Wo siehst Du ein Jahr-2000-Problem?</p> </blockquote> <p>Wenn dauernd etwas wie <code>$_[0]-1900</code> notwendig wird, dann hat die Sprache einen Knacks. JS ist also auch betroffen. Sowas verleitete vor anno 2k geradezu dazu, mit zweistelligen Jahreszahlen zu rechnen.</p> Meine dumme Frage zum Jahresende: Anzahl der Kalenderwochen im Kalenderjahr. Tue, 05 Dec 17 13:21:43 Z https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709640#m1709640 https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709640#m1709640 <p>Unnunne </p> <blockquote> <p>Wenn dauernd etwas wie <code>$_[0]-1900</code> notwendig wird, dann hat die Sprache einen Knacks. JS ist also auch betroffen. Sowas verleitete vor anno 2k geradezu dazu, mit zweistelligen Jahreszahlen zu rechnen.</p> </blockquote> <p>würdch mal sagen, das ist aus Kompatibilitätsgründen so hängengeblieben. PL und OS wollen ja auch irgendwie zusammenarbeiten. Ansonsten sind 2stellige Jahresangaben durchaus gängig und sogar negative. Dem Jahr -1 folgt das Jahr 1 und das passt sowohl rechentechnisch als auch zur Tatsache daß es das Jahr 0 nicht gibt.</p> <p>Ich meine damit, daß man Kalenderberechungen von zeitrelevanten Builtin-Funktionen (gmtime, localtime, POSIX::strftime) vollständig trennen sollte. Wannst willst schicke ich Dir meine Module Scaliger.pm (Gregorianischer und Julianischer Kalender) und Kalenderwoche.pm sag Bescheid. MfG</p> KW ein kleines Perl Module Tue, 05 Dec 17 17:51:45 Z https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709644#m1709644 https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709644#m1709644 <p>Hallo pl,</p> <p>Danke für das Codebeispiel.</p> <p>Aber, hat perl kein switch/case Konstrukt? Das wäre in der first Funktion bestimmt besser als 6 unnötige sprintf Aufrufe.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> KW ein kleines Perl Module Tue, 05 Dec 17 18:04:27 Z https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709645#m1709645 https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709645#m1709645 <p>Hi Rolf mein Lieber,</p> <blockquote> <p>Danke für das Codebeispiel.</p> <p>Aber, hat perl kein switch/case Konstrukt? Das wäre in der first Funktion bestimmt besser als 6 unnötige sprintf Aufrufe.</p> </blockquote> <p>sprintf wird nur einmal aufgerufen: Mit dem Wochentag gehts in das assoz. Array und damit nur ein sprintf ins return. Schreib da mal noch ein return davor</p> <p><code>return $cwd{$self->wd(1,1,$year)->{num}};</code></p> <p>Ansonsten ist der klassische Switch auch in Perl möglich. Ich kenne jedoch keinen der damit arbeitet </p> <p>Schöne Grüße.</p> KW ein kleines Perl Module Tue, 05 Dec 17 18:34:33 Z https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709647#m1709647 https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709647#m1709647 <p>PS: Die Inline Berechnung geht so:</p> <p><code>2 => "31.12.@{[$year-1]}",</code></p> <p>unter Verzicht auf das sprintf. MfG</p> KW ein kleines Perl Module Sun, 17 Dec 17 17:40:59 Z https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1710349#m1710349 https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1710349#m1710349 <p>Hi Rolf,</p> <blockquote> <p>Danke für das Codebeispiel.</p> <p>Aber, hat perl kein switch/case Konstrukt? Das wäre in der first Funktion bestimmt besser als 6 unnötige sprintf Aufrufe.</p> </blockquote> <p>Wenn man mit fortlaufenden Tagen $jd (Julian Day) rechnen kann, ist es gar nicht notwendig, den Wochentag $wd über einen Switch zu jagen. Da genügt eine einfache Kontrollstruktur was den Wochentag $wd betrifft und der Rest ist Berechnung. Die Tabelle noch einmal, links der numerische Wochentag (1 bis 7) und rechts die Korrektur für den fortlaufenden Tag jd':</p> <p>|wd|jd' |1|0 |2|-1 |3|-2 |4|-3 |5|3 |6|2 |7|1</p> <p>In eine Kontrollstruktur gefasst ergibt sich für die Berechnung:</p> <pre><code class="block language-perl"><span class="token keyword">if</span><span class="token punctuation">(</span> <span class="token number">1</span> <span class="token operator"><=</span> <span class="token variable">$wd</span> <span class="token operator">&&</span> <span class="token variable">$wd</span> <span class="token operator"><=</span> <span class="token number">4</span> <span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token variable">$jd</span> <span class="token operator">=</span> <span class="token variable">$jd</span> <span class="token operator">-</span> <span class="token variable">$wd</span> <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span><span class="token punctuation">{</span> <span class="token variable">$jd</span> <span class="token operator">=</span> <span class="token variable">$jd</span> <span class="token operator">+</span> <span class="token number">8</span> <span class="token operator">-</span> <span class="token variable">$wd</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> <p>Mir ist das heute an einer anderen Stelle wieder untergekommen, daß man beim Rechnen mit dem Datum auf Kontrollstrukturen weitgehend verzichten kann sofern es möglich ist mit fortlaufenden Tagen zu rechnen. Wenn man z.B. wissen will, ob auf KW 52 die KW 53 folgt oder KW 1 des nächsten Jahres, wird einfach ein JD-Tag der KW 52 hergenommen, 7 Tage aufaddiert und daraus die resultierende Woche berechnet.</p> <p>Schönen Advent-Sonntag </p> KW ein kleines Perl Module Wed, 06 Dec 17 20:59:16 Z https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709670#m1709670 https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709670#m1709670 <p>Hallo pl,</p> <blockquote> <p>sprintf wird nur einmal aufgerufen…</p> </blockquote> <p>Das würde eins von 2 Dingen voraussetzen:</p> <p>Entweder wird Perl von einem gut optimierenden Compiler übersetzt, der dem Code ansieht, dass nur ein Wert des Array verwendet wird und den Code unter der Haube in ein switch umbaut.</p> <p>Oder Perl speichert keine Werte im (assoziativen) Array, sondern Lambdas, so dass der eigentliche Wert eines Array-Elements erst beim Zugriff bestimmt wird. Dafür sieht die Syntax aber eigentlich zu konventionell aus.</p> <p>Tatsächlich? Ist Perl so ein raffinierter Hund?</p> <p>Nach meinem Verständnis einer altehrwürdigen, vom Optimierungen unverdorbenen Scriptsprache wie PHP oder Perl wird zunächst mal das Array aufgebaut und dafür sieben Mal sprintf aufgerufen. Es entsteht ein assoziatives Array mit sieben int => string Einträgen (wobei auch ein einfaches Array genügt hätte, aber das scheint ja bei vielen Perl<a href="https://www.perrypedia.proc.org/wiki/Perlians" rel="nofollow noopener noreferrer">ia</a>ns idiomatisch zu sein), und davon wird dann einer verwendet.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> KW ein kleines Perl Module Thu, 07 Dec 17 07:23:25 Z https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709672#m1709672 https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709672#m1709672 <p>Stimmt, Du hast recht. Du kannst es entweder ohne sprintf machen:</p> <pre><code class="block language-perl"> <span class="token keyword">my</span> <span class="token variable">%cwd</span> <span class="token operator">=</span> <span class="token punctuation">(</span> <span class="token number">0</span> <span class="token operator">=></span> <span class="token string">"02.01.$year"</span><span class="token punctuation">,</span> <span class="token number">1</span> <span class="token operator">=></span> <span class="token string">"01.01.$year"</span><span class="token punctuation">,</span> <span class="token number">2</span> <span class="token operator">=></span> <span class="token string">"31.12.@{[$year-1]}"</span><span class="token punctuation">,</span> <span class="token number">3</span> <span class="token operator">=></span> <span class="token string">"30.12.@{[$year-1]}"</span><span class="token punctuation">,</span> <span class="token number">4</span> <span class="token operator">=></span> <span class="token string">"29.12.@{[$year-1]}"</span><span class="token punctuation">,</span> <span class="token number">5</span> <span class="token operator">=></span> <span class="token string">"04.01.$year"</span><span class="token punctuation">,</span> <span class="token number">6</span> <span class="token operator">=></span> <span class="token string">"03.01.$year"</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>oder Du legst eine Referenz auf sprintf:</p> <pre><code class="block language-perl"> <span class="token keyword">my</span> <span class="token variable">%cwd</span> <span class="token operator">=</span> <span class="token punctuation">(</span> <span class="token number">2</span> <span class="token operator">=></span> <span class="token keyword">sub</span><span class="token punctuation">{</span>sprintf <span class="token string">"31.12.%d"</span><span class="token punctuation">,</span> <span class="token variable">$year</span> <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token variable">$cwd</span><span class="token punctuation">{</span><span class="token variable">$self</span><span class="token operator">-></span>wd<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token variable">$year</span><span class="token punctuation">)</span><span class="token operator">-></span><span class="token punctuation">{</span>num<span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token operator">-></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>MfG</p> KW ein kleines Perl Module Thu, 07 Dec 17 07:57:00 Z https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709674#m1709674 https://forum.selfhtml.org/self/2017/nov/30/meine-dumme-frage-zum-jahresende-anzahl-der-kalenderwochen-im-kalenderjahr/1709674#m1709674 <p>Ergänzung:</p> <pre><code class="block language-perl"><span class="token keyword">return</span> <span class="token variable">$cwd</span><span class="token punctuation">{</span><span class="token variable">$self</span><span class="token operator">-></span>wd<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token variable">$year</span><span class="token punctuation">)</span><span class="token operator">-></span><span class="token punctuation">{</span>num<span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token operator">-></span><span class="token punctuation">(</span><span class="token variable">$year</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>Das Jahr muss noch übergeben werden.</p>