Das Notes Forum

Domino 9 und frühere Versionen => Administration & Userprobleme => Thema gestartet von: RalfK am 22.10.04 - 12:26:53

Titel: Errechnen der Kalenderwoche aus dem eingegeben Datum
Beitrag von: RalfK am 22.10.04 - 12:26:53
Hallo Notes Gemeinde,

ich habe eine kleine Frage bezüglich des Kalenderdatums. In der Ansicht erscheinen ja die Wochentage und gleichzeitig wird unten aufgeführt, in welcher Kalenderwoche ich mich gerade befinde.

Gibt es eine Möglichkeit, die Kalenderwoche anhand des eingegebenen Datums berechnen zu lassen?

Bsp: Eingabe 29.10.
Ausgabe in berechnetem Feld: Kalenderwoche: 44

Kann mir jemand ein paar Tipps geben. Bitte nicht gleich den kompletten String posten, da ich möglichst versuchen möchte, das alleine heraus zu bekommen (auch wenn meine Notes Programmier Kenntnisse noch in den Kinderschuhen stecken).

MfG
Ralf
Titel: Re: Errechnen der Kalenderwoche aus dem eingegeben Datum
Beitrag von: eknori am 22.10.04 - 12:30:34
Auch wenn es jetzt doch die Lösung ist; du wirst genug zu tun haben, den Weg zu analysieren:

REM {This formula satisfies ISO 8601:1988};
REM {D is the date of interest.};
D := @TextToTime(@Prompt([OkCancelEdit]; "Enter Date"; "Please enter a date to convert to a week number:"; ""));
REM {D := [31/12/95]};

FirstOfYear := @Date(@Year(D); 1; 1);
LastOfYear := @Date(@Year(D); 12; 31);
FirstDayNum := @Weekday(FirstOfYear);
LastDayNum := @Weekday(LastOfYear);

REM {ISO weeks start on Monday and ends on Sunday.};
ISOFirstDayNum := @If(FirstDayNum = 1; 7; FirstDayNum - 1);
ISOLastDayNum := @If(LastDayNum = 1; 7; LastDayNum - 1);

REM {The first and last ISO week is the first};
REM {and last ISO week to include Thursday};
IsFirstWeek := 7 - ISOFirstDayNum > 2;
IsLastWeek := 7 - ISOLastDayNum < 4;
REM {The date of the first day of the first ISO week};
ISOFirstDay := @If(IsFirstWeek;
            @Adjust(FirstOfYear; 0; 0; 1 - ISOFirstDayNum; 0; 0; 0);
            @Adjust(FirstOfYear; 0; 0; 8 - ISOFirstDayNum; 0; 0; 0));
REM {The date of the last day of the last ISO week};
ISOLastDay := @If(IsLastWeek;
            @Adjust(LastOfYear; 0; 0; 7 - ISOLastDayNum; 0; 0; 0);
            @Adjust(LastOfYear; 0; 0; -ISOLastDayNum; 0; 0; 0));

REM {Date outside ISOFirstDay and ISOlastDay};
REM {are from the previous or next year};
REM {Return the ISO week number and exit};

FirstWeekNextYear := @If(D > ISOLastDay; @Return(@Prompt([Ok]; "FWNY";
@Text(@Year(D)+1) + "W01")); NULL);

REM {I suspect this is where Julian dates would be useful};
REM {A recursive call could be used in a real language};
LastWeekLastYear := (D - @Adjust(FirstOfYear; -1; 0; 0; 0; 0; 0))/60/60/24/7;
AdjustLastWeek := 1 - (LastWeekLastYear - @Integer(LastWeekLastYear));
@Set("LastWeekLastYear"; LastWeekLastYear + AdjustLastWeek);
@If(D < ISOFirstDay;
@Return(@Prompt([Ok]; "LWLY"; @Text(@Year(D) - 1) + "W" +
@Text(LastWeekLastYear))); NULL);

REM {If you get this far, the date falls into an ISO week this year};
REM {Convert the difference in seconds to weeks};
NumWeeks := (D - ISOFirstDay)/60/60/24/7;

REM {Fractions indicate that the date falls};
REM {in the middle of the ISO week};
WeekAdjust := 1 - (NumWeeks - @Integer(NumWeeks));
ISOWeekNum := NumWeeks + WeekAdjust;

REM {Conform to ISO 8601 format};
Pad:=@If(ISOWeekNum<10;"0";"");
Result := @Text(ISOWeekNum);

@Prompt([Ok];"Week number"; Result)
Titel: Re: Errechnen der Kalenderwoche aus dem eingegeben Datum
Beitrag von: Axel am 22.10.04 - 12:34:24
Hi,

hier noch ein paar Links zu diesem Thema die ich gefunden habe:

http://www.keysolutions.com/NotesFAQ/howweek.html
http://www-10.lotus.com/ldd/46dom.nsf/55c38d716d632d9b8525689b005ba1c0/a6c95dc638790d2585256cec0039c1e4?OpenDocument
http://www-10.lotus.com/ldd/46dom.nsf/55c38d716d632d9b8525689b005ba1c0/4cf5bf02317a1a8d85256cec0034e593?OpenDocument


Axel
Titel: Re: Errechnen der Kalenderwoche aus dem eingegeben Datum
Beitrag von: RalfK am 22.10.04 - 12:41:44
Wow, danke für die schnellen Antworten.  :o


Auch wenn es jetzt doch die Lösung ist; du wirst genug zu tun haben, den Weg zu analysieren:

Nun, ich hatte eh nichts vor am wochenende.  ;D
Titel: Re: Errechnen der Kalenderwoche aus dem eingegeben Datum
Beitrag von: koehlerbv am 22.10.04 - 12:44:26
Vielleicht noch ein Tipp am Rande:
Gerade in dieser Woche habe ich mich mit einer Fremdapplikation beschäftigen müssen, die genau die Routine von Christian Meis (-> Keysolutions-Link) verwendet hat.
Da hat mal wieder jemand überhaupt nicht über seinen Tellerrand geschaut. Beispiel:

Code
December31Offset = CalculateIsoWeekday( Cdat( "31.12." & Cstr( YearInQuestion  ) ) ) 

Das wird ganz lustig, wenn man das in einem internationalen Konzern einsetzt, bei dem nahezu jedes Datumsformat denkbar ist.


Übrigens: Format$ kennt für Datumswerte auch den Parameter "ww".  ;)

Bernhard
Titel: Re: Errechnen der Kalenderwoche aus dem eingegeben Datum
Beitrag von: TMC am 22.10.04 - 19:16:35
Übrigens: Format$ kennt für Datumswerte auch den Parameter "ww".  ;)

Bernhard, da sollte man aber noch darauf hinweisen, dass dies AFAIK nicht der Kalenderwoche nach ISO 8601 entspricht.

Titel: Re: Errechnen der Kalenderwoche aus dem eingegeben Datum
Beitrag von: koehlerbv am 22.10.04 - 20:06:05
Nö, das tut es nicht. Fällt aber erst 2010 wieder auf  ;D

Bernhard
Titel: Re: Errechnen der Kalenderwoche aus dem eingegeben Datum
Beitrag von: Glombi am 22.10.04 - 20:44:46
Ich habe mal einen kurzen Moment mit Format und ww experimentiert.... und es dann wieder in der Versenkung verschwinden lassen.

http://www.atnotes.de/index.php?topic=13943.msg81430#msg81430

Andreas
Titel: Re: Errechnen der Kalenderwoche aus dem eingegeben Datum
Beitrag von: Axel am 22.10.04 - 20:44:54
Übrigens: Format$ kennt für Datumswerte auch den Parameter "ww".  ;)

Bernhard, da sollte man aber noch darauf hinweisen, dass dies AFAIK nicht der Kalenderwoche nach ISO 8601 entspricht.



Hi,

nu muss ich doch mal ganz dumm fragen (ich weiß, eigentlich gibt es keine dummen Fragen  ;)).
Ich gebe zu, ich hab mich mit dem Thema noch nicht eingehend beschäftigt (bzw. beschäftigen müssen).

Was besagt denn diese ominöse ISO 8601? Und was hat es mit dem Jahr 2010 auf sich?


Axel
Titel: Re: Errechnen der Kalenderwoche aus dem eingegeben Datum
Beitrag von: Glombi am 22.10.04 - 20:48:54
http://de.wikipedia.org/wiki/ISO_8601

und 2010 ist glaube ich ein Film.

Ich kenne keinen, der das Datum gemäß der ISO Norm schreibt. Ich WILL das auch nicht so machen  ;D

Andreas
Titel: Re: Errechnen der Kalenderwoche aus dem eingegeben Datum
Beitrag von: koehlerbv am 22.10.04 - 20:57:31
ISO 8061 sagt hinsichtlich Kalenderwoche aus: Wenn die Mehrheit der ersten Woche im Jahr im Januar liegen, dann ist das KW 1, sonst KW 53 des Vorjahres. Wichtig ist also der 4. Januar - wenn der <= Donnerstag ist, dann ...
Bis zum Jahr 2009 sind jeweils die "ersten Januare" in KW1, dann kommt in 2010 die KW 53 dran (wenn ich mich jetzt in der Schnelle nicht versehen habe).

Abgesehen davon: Format$ ist nicht nur hinsichtlich KW kritisch ... Ich hätte den "Gag" eigentlich gar nicht erwähnen dürfen, um hier keinen zu verwirren.

Bernhard
Titel: Re: Errechnen der Kalenderwoche aus dem eingegeben Datum
Beitrag von: Axel am 22.10.04 - 20:58:32
Danke ihr Beiden.

Die im Link erwähnte DIN 5008 war mir ein Begriff. Ich habe das aber nie in Verbindung mit der ISO 8601 gebracht.

Ich kann dir nur zustimmen, ich will das Datum auch nicht nach ISO schreiben. Aber bei uns in der Firma gab's mal heisse Diskussionen zum Thema Datum und DIN. Gott sei Dank waren die "DINologen" in der Minderheit.


Axel
Titel: Re: Errechnen der Kalenderwoche aus dem eingegeben Datum
Beitrag von: Semeaphoros am 23.10.04 - 15:52:00
Da gibts noch was anderes dazu zu sagen: Format$ ww ist in verschiedenen Versionen darüber hinaus auch noch buggy, kann leider keine Liste angeben, wo es falsche Werte liefert (ausser dem schon erwähnten), aber vermutlich dürften die Release-Notes ein paar Einträge dazu haben.