blueberry
Goto Top

Der erste Tag vom Jahr berechnen

Hallo Zusammen,

Ich sollte den ersten Tag des Jahres wissen.

Input: Datum (DD.MM.JJJJ)
Output: Wochenzahl

Die eingabe habe ich bereits ich weiss auch welcher Tag das es ist und die Wochennummer hab ich im grössten Teil auch, aber:

Ich sollte wissen wieviele Tage ich dazurechnen muss, damit die Wochennummer stimmt wie kann ich das machen ?

Danke für die Hilfe !

Mit freundlichen Grüssen

Blueberry

[EDIT] Das richtige Thema ist etwas weiter unten da ich hier eigtl. nur quatsch geschrieben habe [/EDIT]

Content-Key: 98534

Url: https://administrator.de/contentid/98534

Ausgedruckt am: 28.03.2024 um 14:03 Uhr

Mitglied: miniversum
miniversum 06.10.2008 um 13:55:42 Uhr
Goto Top
Welche Programmiersprache?
Mitglied: AndreasHoster
AndreasHoster 06.10.2008 um 13:59:56 Uhr
Goto Top
???
Die Fragestellung ist nicht ganz klar.
Ich sollte den ersten Tag des Jahres wissen.
Wie wäre es mit dem 1 Januar?
Ich sollte wissen wieviele Tage ich dazurechnen muss, damit die
Wochennummer stimmt wie kann ich das machen ?
Was meinst Du mit dazurechnen damit die Wochennummer stimmt?

Wenn ich mal den zum Teil widersprüchlichen Sinn der einzelnen Sätze beiseite lasse und mir aus den Stichworten eine Frage zusammenreimen soll geht es um folgendes Problem:
Dir ist nicht ganz klar ob die Woche, die vor dem 1 Januar anfängt und nach dem 1 Januar zuende ist die erste oder eventuell die 52/53 KW ist.
Ist diese Vermutung richtig oder nicht?
Wenn nicht, bitte eine verstehbare Frage stellen.
Mitglied: Blueberry
Blueberry 06.10.2008 um 14:18:00 Uhr
Goto Top
Die Sprache wäre Batch sry miniversum.

@AndreasHoster

Hallo,
Nein, es is überhaupt nicht wiedersprüchlich;). Ich sollte wissen ob das Jahr mit einem Montag oder Diensttag oder einem Mittwoch etc. beginnt. Damit ich dann den Richtigen Zusatz bei den Tagen machen kann... Aber das wegen dem Zusatz muss dich nicht so interessieren... Ich sollte nur wissen, wie ich herausfinden kann ob es ein Mo oder Di ... oder So ist ^^

Mit freundlichen Grüssen

Blueberry
Mitglied: bastla
bastla 06.10.2008 um 15:58:08 Uhr
Goto Top
Hallo Blueberry!

Die unten stehende Rubrik "Anleitungen zum Thema" ist tatsächlich nicht nur da, um die Seite zu füllen - wenn Du also versuchsweise gleich den ersten Link (zu Bibers Workshop) verwendest ...

Grüße
bastla
Mitglied: AndreasHoster
AndreasHoster 06.10.2008 um 17:06:09 Uhr
Goto Top
Das der Wochentag des 1. Januars gefragt war, daß stand nicht in Deinem Text drin.
Und es ist widersprüchlich, oder wie soll ich die zwei Aussagen
Ich sollte den ersten Tag des Jahres wissen
und
ich weiss auch welcher Tag das es ist
Anders als sich widersprechend bezeichnen?
Und was mit Wochennummer gemeint ist, ist auch unklar, auch wenn ich inzwischen vermute, daß damit der Wochentag gemeint ist, also Montag=1, Dienstag=2 etc.
Aber das ist dem Text ohne Raterei nicht zu entnehmen.

Aber zurück zum technischen Problem:
Was Du dazuaddieren willst/sollst wird wohl niemand beantworten können, da niemand weiß nach welchem Algorithmus Du überhaupt den Wochentag ausrechnen willst.
Wenn man in Wikipedia schaut gibts da mehrere Varianten:
Doomsday Algorithmus, Gaußsche Wochentagsformel, Zellersche Kongruenz und jede rechnet sich anders.

Ohne genaue Infos was Dein Problem ist, werde zumindestens ich Dir nicht weiterhelfen können, Hellseherei ist nicht meine Stärke.
Mitglied: 51705
51705 06.10.2008 um 21:31:40 Uhr
Goto Top
Zitat von @miniversum:
Welche Programmiersprache?

Das ist Mathematik, mit der Programmiersprache hat das wenig zu tun...
Mitglied: miniversum
miniversum 06.10.2008 um 21:40:58 Uhr
Goto Top
Stimmt im Prinzip schon. Dennoch ist die Frage ncith unerheblich da eine Sprache wie z.B. vbs die möglichkeit besitzt mit einem Datum umzugehenudn fertige funktionen dafür anbietet. Batch besitzt dies nicht.
Mitglied: 51705
51705 06.10.2008 um 21:47:39 Uhr
Goto Top
Hallo miniversum,

deine Schreibselei ist für mich nicht verständlich (egal ob Batch oder VBS).

Die erste Jahreswoche ist mit mindestens 4 Wochentagen definiert. Darauf aufbauend kann ich doch jedes Datum errechnen.

Grüße, Steffen
Mitglied: bastla
bastla 06.10.2008, aktualisiert am 18.10.2012 um 18:36:21 Uhr
Goto Top
Hallo miniversum und smerlin!

Eigentlich habt Ihr beide recht face-wink - Mathematik ist es natürlich immer, nur nimmt VBS einem die Berechnung ab:
WScript.Echo Weekday(#2008-1-1#)
während (wie in Bibers Tutorial gezeigt) die Lösung in Batch "zu Fuß" erfolgen muss:
@echo off & Setlocal
set /a yy=2008,mm=1,dd=1

set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,dow=153*m+2
set /a dow=dow/5+dd+y*365+y/4-y/100+y/400-2472630,dow%%=7,dow+=1
echo %dow%
Anzumerken wäre noch, dass für VBS (defaultmäßig) Sonntag = 1 gilt (lässt sich aber durch den zusätzlichen Parameter "2" auch auf Montag ändern), während in der Batchvariante die 1 für Montag steht ...

Grüße
bastla
Mitglied: Blueberry
Blueberry 07.10.2008 um 09:17:22 Uhr
Goto Top
Hallo Zusammen,

Sry ist wirklich nicht so ganz klar ^^.
Meine Aufgabe ist es einen Batch zu schreiben, der herausfindet zu welcher Kalenderwoche das eingegebene Datum gehört... Das da aber die angaben stimmen, muss ich ja, weil das Jahr nicht immer mit Montag als 01.01 beginnt, einen Abzug oder eine Zugabe machen. Damit ich diese machen kann, muss ich wissen mit welchem Tag, dass das Jahr anfängt damit ich, dass abgleichen kann mit dem Jahr 2007 (Das Jahr 2007 fängt mit einem Montag als 01.01 an), um dann die richtige Zahl zu erhalten. Aber mein Problem ist, dass es vom Jahr 2000 bis 2014 funktioniert, aber dann früher oder später nicht. Ich habe das Problem gelöst indem ich einfach das Jahr minus 2007 gemacht habe und das dann dazu gegeben habe ( kann negative Zahlen ergeben was ganz gut ist damit geht es bis zum Jahr 2000 gut). Aber wenn die Zahl grösser als 7 wird, ist es wieder quatsch, kann ich irgendwie sagen er soll solange 7 abziehen bzw. dazu geben, bis er im bereich von -7 - +7 ist ?
Was ganz oben steht stimmt nicht mehr ganz, weil ich es schon geändert habe...

Mit freundlichen Grüssen

Blueberry
Mitglied: bastla
bastla 07.10.2008 um 09:35:32 Uhr
Goto Top
Hallo Blueberry!

Eigentlich müsste es genügen, 7 abzuziehen, solange das Ergebnis > 7 ist, also etwa:
...
:Loop
if %Zahl% gtr 7 (
    set /a Zahl-=7
    goto :Loop
)
echo %Zahl%
Besser wäre die "Modulo"-Variante:
set /a Zahl=%Zahl%%%7
if %Zahl%==0 set Zahl=7
Abgekürzt lässt sich die erste Zeile auch als
set /a Zahl=Zahl%%7
schreiben, wodurch der "Modulo"-Operator "%" (oben in der Schreibweises für die Verwendung innerhalb eines Batches, daher verdoppelt) besser zu erkennen ist (siehe auch "set /?").
Abgesehen davon wäre der verwendete Algorithmus zu überdenken, wenn dieser tatsächlich nur für die Jahre 2000 bis 2014 funktioniert ...

Grüße
bastla
Mitglied: Blueberry
Blueberry 07.10.2008 um 09:54:05 Uhr
Goto Top
Hallo bastla,

Danke für deinen Beitrag,
Ich sollte ihn vom Jahre 0 bis zum Jahre 2014+Unendlich schreiben^^.


Mit freundlichen Grüssen

Blueberry
Mitglied: Blueberry
Blueberry 07.10.2008 um 10:42:16 Uhr
Goto Top
Ich glaube ich habe es zum Laufen gebracht... Jetzt muss ich es nur noch Testen.

DANKE AN ALLE DIE GEHOLFEN HABEN!!!!
vorallem Bastla

Mit freundlichen Grüssen

Blueberry
Mitglied: Biber
Biber 07.10.2008 um 13:51:06 Uhr
Goto Top
Moin Blueberry,

Ich sollte ihn vom Jahre 0 bis zum Jahre 2014+Unendlich schreiben^^.
Das wird aus mehreren (praktischen und ganz banalen) Gründen nicht funktionieren.
Unter anderem deshalb, weil wir diesen Kalender noch gar nicht "seit dem Jahr 0" verwenden.

Und wenn weiterhin in derart unverständlichen Dimensionen wie bisher die F.D.P. gewählt wird, dann könnten wir, falls verkaufsoffene Sonntage und Midnight-Shopping nicht mehr ausreichen auch in regional begründeten Ausnahmefällen in ein paar Jahren auch am 32. Februar in den MediaMarkt. Warum soll der Staat immer so viel reglementieren?

Und da weiß noch kein Schwein, wie der Wochentag heißen wird (ich denke "Westerwoch", aber. man/frau weiss es nicht...).

Ein paar leicht verdauliche Algorithmen zur Kalenderproblematik gibt es bei der Uni Bonn.

Was ich damit sagen will: Niemand wird von Dir eine Wochentags/Kalenderwochenberechnung verlangen außerhalb des Zeitraumes 1900 -2100.
Hey, Wochentage davor hat nicht mal Johannes Heesters noch bewusst miterlebt, bestenfalls Maria Hellwig oder Thomas Gottschalk.
Und nach dem Jahr 2100 ist für Dich und auch Deinen Cheffe jeder Tag ein Sonntag - was willst Du da berechnen?

Ich würde an Deiner Stelle (falls sich kein reproduzierbarer Algorithmus ableiten lässt) wie schon einmal vorgeschlagen mit einer kleinen internen Tabelle arbeiten, in der für jedes "interessante" Jahr hinterlegt ist, wie viele Tage plus/minus korrigiert werden müssen bei einer KW-Ermittlung.
Schematisches Beispiel:
1980: +2
1981: 0
1982: -3
...
...
2050: 1

Ich glaube ich habe es zum Laufen gebracht... Jetzt muss ich es nur noch Testen.
Bitte gib danach nochmal Feedback - der Beitrag wird ja durchaus interessiert mitgelesen.

Grüße
Biber
Mitglied: Blueberry
Blueberry 08.10.2008 um 11:12:55 Uhr
Goto Top
Ja, das bis ich ein Feedback habe könnte es Dauern... Ich fange noch einmal von vorne an, aber evtl. hab ich das Heute noch (ich habe jetzt viel mehr Erfahrung als am Anfang dieses Threads face-smile). Und wegen der Tabelle, dass darf ich nicht machen... Mein Lehrmeister will eine rein Batch-programmierte Lösung. face-wink

Aber danke schon einmal für die Tipps...face-smile

Mit freundlichen Grüssen

Blueberry
Mitglied: bastla
bastla 08.10.2008 um 12:19:06 Uhr
Goto Top
Hallo Sandro!

Und wegen der Tabelle, dass darf ich nicht machen... Mein Lehrmeister will eine rein Batch-programmierte Lösung.
@echo off & setlocal
REM DATA 1980:+2
REM DATA 1981:+0
REM DATA 1982:-3
REM ...

set "Jahr=1982"  

set Korr=
for /f "tokens=2 delims=:" %%i in ('findstr /c:"REM DATA %Jahr%:" %0') do set "Korr=%%i"  
if defined Korr echo %Korr%
Ist doch ein Batch ... face-wink

... aber einen Algorithmus, der ohne die Tabelle auskommt, wirst Du sicher auch finden (und wenn Du in diesem Thread weiter nach oben schauen musst). face-wink

Grüße
bastla
Mitglied: Blueberry
Blueberry 16.10.2008 um 10:42:47 Uhr
Goto Top
Hallo Zusammen,

Ich habe das Programm schon fast fertig (bin noch 5 Wochen hintendrein bei der Ausgabe aber egal)face-smile Und ja die wird nach den ISO-Vorschriften sein also nicht mit Windows vergleichen, weil die einfach keine Ahnung habenface-wink.
[edit1] So den ersten riesen Fehler hab ich mal gefunden, jetzt sind es nicht mehr 5 sondern nur noch 1 Woche die falsch ist, aber das pack ich schon!face-smile Jetzt kanns nicht mehr sehr lange gehn face-wink.

Mit freundlichen Grüssen

Blueberry