Autor Thema: Errechnen der Kalenderwoche aus dem eingegeben Datum  (Gelesen 4314 mal)

Offline RalfK

  • Frischling
  • *
  • Beiträge: 49
  • Geschlecht: Männlich
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

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re: Errechnen der Kalenderwoche aus dem eingegeben Datum
« Antwort #1 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)
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline RalfK

  • Frischling
  • *
  • Beiträge: 49
  • Geschlecht: Männlich
Re: Errechnen der Kalenderwoche aus dem eingegeben Datum
« Antwort #3 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

Offline koehlerbv

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Errechnen der Kalenderwoche aus dem eingegeben Datum
« Antwort #4 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

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: Errechnen der Kalenderwoche aus dem eingegeben Datum
« Antwort #5 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.

Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline koehlerbv

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Errechnen der Kalenderwoche aus dem eingegeben Datum
« Antwort #6 am: 22.10.04 - 20:06:05 »
Nö, das tut es nicht. Fällt aber erst 2010 wieder auf  ;D

Bernhard

Glombi

  • Gast
Re: Errechnen der Kalenderwoche aus dem eingegeben Datum
« Antwort #7 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

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Errechnen der Kalenderwoche aus dem eingegeben Datum
« Antwort #8 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
Ohne Computer wären wir noch lange nicht hinterm Mond!

Glombi

  • Gast
Re: Errechnen der Kalenderwoche aus dem eingegeben Datum
« Antwort #9 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

Offline koehlerbv

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Errechnen der Kalenderwoche aus dem eingegeben Datum
« Antwort #10 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

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Errechnen der Kalenderwoche aus dem eingegeben Datum
« Antwort #11 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
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re: Errechnen der Kalenderwoche aus dem eingegeben Datum
« Antwort #12 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.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz