Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Datum zu KW Normierung (https://www.delphipraxis.net/173354-datum-zu-kw-normierung.html)

Union 19. Feb 2013 16:57

AW: Datum zu KW Normierung
 
Wenn ich es richtig verstehe willst den Benutzer als Selektionskriterium KW von-bis eingeben lassen und daraus den Datumsbereich errechnen? Dann gehört aber das Jahr dazum denn wie Du selbst gemerkt hast ist die KW alleine nicht eineindeutig.

BUG 19. Feb 2013 17:02

AW: Datum zu KW Normierung
 
Wenn ich richtig verstehe, sollte das ungefähr das machen, was du möchtest:
Delphi-Quellcode:
function pseudoKW(date: TDateTime): integer;
begin
  result = weekOf(date);
  if (result > 51) and (monthOf(date) = 1) then
    result = 0
  else if (result = 1) and (monthOf(date) = 12) then
    result = weekOf(incWeek(date, -1)) + 1;
end;

ibp 19. Feb 2013 17:03

AW: Datum zu KW Normierung
 
Zitat:

Zitat von Union (Beitrag 1204368)
Wenn ich es richtig verstehe willst den Benutzer als Selektionskriterium KW von-bis eingeben lassen und daraus den Datumsbereich errechnen? Dann gehört aber das Jahr dazum denn wie Du selbst gemerkt hast ist die KW alleine nicht eineindeutig.

genau umgekehrt. Es geht im Prinzip um Termine (Datum) die in einem Report der in KW aufgeteilt ist zugeordnet werden.

Die Grenzen können vom Anwender gewählt werden und sind Start-Datum bis End-Datum. Start bis Ende sind maximal 1 Jahr. Alle Termine sollen nun den entsprechenden KW zugeordnet werden.

Klassischer Fall Auswahl 1.1. - 31.12. aber es kann auch 5.5.2012 - 4.5.2013 ausgewählt werden oder aber auch eine kürzere Periode.

BUG 19. Feb 2013 17:18

AW: Datum zu KW Normierung
 
Dein Problem ist also, dass die Kombination aus Jahr und KW eine Woche nicht eindeutig kennzeichnet :idea:
Dann würde ich die KW so lassen wie sie sind und mir überlegen, wie du das Jahr, zu dem die Kalenderwoche gehört, ermittelst.

In MySQL geht das anscheinend mit YEARWEEK.

Furtbichler 19. Feb 2013 18:34

AW: Datum zu KW Normierung
 
Zitat:

Zitat von Union (Beitrag 1204361)
...Die Woche des 1. Jan 2012 war ja noch die KW 2011/52 da dieser Tag ein Sonntag war und bei einem definierten Wochenbeginn am Montag lagen eben 6 von 7 Tagen im Jahr 2011.

Nicht ganz
Zitat:

Zitat von Wiki
Zählweise nach DIN 1355/ISO 8601

Die deutschsprachige Kalender-Industrie hält sich ausnahmslos an die internationale Norm ISO 8601 (1973), die als letzten Tag der Woche den Sonntag bestimmt, statt des Samstags/Sonnabends/Sabbats, wie es in der jüdisch-christlich-islamischen Tradition üblich ist.

Im Geltungsbereich der Normen des DIN Deutschen Instituts für Normung e. V. werden seit 1976 durch Normung folgende Regeln empfohlen:
Jeden Montag und nur montags beginnt eine neue Kalenderwoche.
Die erste Kalenderwoche ist diejenige, die mindestens vier Tage des neuen Jahres enthält.

Aus diesen Punkten ergeben sich folgende Eigenschaften:
Es gibt keine unvollständigen Kalenderwochen, ausnahmslos jede KW enthält genau sieben Tage.
Jedes Jahr hat entweder 52 oder 53 Kalenderwochen.
Ein Jahr hat genau dann 53 Kalenderwochen, wenn es mit einem Donnerstag beginnt oder endet:
Ein Normaljahr mit 53 Wochen beginnt und endet an einem Donnerstag.
Ein Schaltjahr mit 53 Wochen beginnt entweder an einem Mittwoch und endet somit mit Donnerstag oder beginnt an einem Donnerstag und endet an einem Freitag.
Der 4. Januar liegt immer in Kalenderwoche 1.
Der 29., 30. und 31. Dezember können schon zur ersten Kalenderwoche des Folgejahres gehören.
Der 1., 2. und 3. Januar können noch in der letzten Kalenderwoche des Vorjahres liegen.
Der Donnerstag ist ausschlaggebend, zu welchem Jahr die Woche gezählt wird. Liegt er im neuen Jahr, ist es die Kalenderwoche 1.

Und da das nun mal so ist und Du doch niemandem zumuten willst, plötzlich mit Ordnungszahlenwochenranks zu arbeiten, hältst Du dich doch lieber an die Norm und machst das so wie alle anderen, oder etwa nicht?

Photoner 13. Jan 2014 13:01

AW: Datum zu KW Normierung
 
Ich bin zwar etwas spät dran mit meiner Antwort, aber vielleicht hilft es ja jemandem der zufällig hierüber stolpert:

Delphi-Quellcode:
uses DateUtils;
Delphi-Quellcode:
function WeekOfTheYear(const AValue: TDateTime; var AYear: Word): Word;
var
  LDOW: Word;
begin
  DecodeDateWeek(AValue, AYear, Result, LDOW);
end;
Liefert die KW nach ISO 8601 und das zugehörige Jahr. D.h. für den 30.12.2013 gibt die Funktion als Ergebnis die "1" zurück und der Variablen AYear wird die "2014" zugewiesen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:14 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz