AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Kalenderwoche ermitteln

Ein Thema von claudine99 · begonnen am 22. Mai 2013 · letzter Beitrag vom 1. Jun 2013
Antwort Antwort
claudine99

Registriert seit: 9. Mär 2012
20 Beiträge
 
Delphi 2009 Professional
 
#1

Kalenderwoche ermitteln

  Alt 22. Mai 2013, 17:48
Hallo zusammen, ich benötige eine Funktion, die bei einem 'on change' Ereignis eines Editfeldes aufgerufen wird. Sie soll folgendes tun: Es gibt ein Editfeld mit einer Kalenderwoche und eines mit der Jahresangabe. Wird nun in ein 3. Editfeld eine Wochenanzahl eingegeben, soll in ein viertes Feld automatisch die 1. Kalenderwoche + der eingegebenen Wochenanzahl erscheinen. Ein 5. Feld beinhaltet das errechnete Jahr.

cw year Wochen cw year
12 2013 5 17 2013

oder

52 2013 6 6 2014

Hat jemand eine Idee?

Vielen Dank und Grüße
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#2

AW: Kalenderwoche ermitteln

  Alt 22. Mai 2013, 18:17
Da würde ich zuerst einen Blick in DateUtils.pas werfen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
madtom

Registriert seit: 24. Feb 2005
Ort: Hamburg
115 Beiträge
 
Delphi XE7 Professional
 
#3

AW: Kalenderwoche ermitteln

  Alt 22. Mai 2013, 18:33
Hallo,

zum Berechnen der Kalenderwoche wirst Du eine Menge Tipps in allen möglichen Code-Collections finden, u.a. hier:

http://www.s170867368.online.de/delphi/kw.php

Gruß Thomas
Thomas
Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#4

AW: Kalenderwoche ermitteln

  Alt 22. Mai 2013, 18:40
Oder in DateUtils (das hatten wir doch schon?).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#5

AW: Kalenderwoche ermitteln

  Alt 22. Mai 2013, 19:21
Gibts na nicht ne fertige Funktion in einer der Units, die bei Delphi dabei sind?

Wie hieß die doch gleich...

Verdammt, komm nich drauf, irgendwas mit ...Utils. tcpUtils.pas? Nee.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#6

AW: Kalenderwoche ermitteln

  Alt 22. Mai 2013, 19:41
Hallo,

eigentlich ist das doch "nur" ein bisserl Rechenarbeit. Eventuell hilft dasda ja:
Delphi-Quellcode:
procedure Wochenrechner;
var
        dt : TDateTime;
        cw1 : Integer;
        Wochen : Integer;
        cw2 : Integer;
        Jahr : Integer;
begin
  cw1 := StrToInt(edCW1.Text); // im Beispiel 52
  cw1 := cw1 * 7; // Ergibt die Anzahl Tage für 52 Wochen.
  dt := StrToDate('01.01.') + StrToInt(edYear.Text); // im Beispiel 2013
  dt := dt + cw1; // Ist das Datum der 52. Woche.
  Wochen := StrToInt(edWochen.Text); // im Beispiel 6
  Wochen := Wochen * 7; // Ergibt die Anzahl Tage für 6 Wochen.
  dt := dt + Wochen; // Zum Datum der 52 Wochen entsprechende Anzahl Tage hinzuzählen.
  cw2 := WeekOfTheYear(dt); // Die Woche des errechneten Datums ermitteln.
  Jahr := YearOf(dt); // Das Jahr des errechneten Datums ermitteln.
  edCW2.Text := IntToStr(cw2);
  edYear.Text := IntToStr(Jahr);
end;
Ist ungetestet mal einfach so dahingedaddelt.

Oder ein bisserl kürzer:
Delphi-Quellcode:
var
        dt : TDateTime;
begin
  dt := StrToDate('01.01.') + StrToInt(edYear.Text)
      + (StrToInt(edCW1.Text) + StrToInt(edWochen.Text)) * 7;
  edCW2.Text := IntToStr(WeekOfTheYear(dt));
  edYear.Text := IntToStr(YearOf(dt));
end;
Latürnich auch nicht getestet.
  Mit Zitat antworten Zitat
Benutzerbild von kwhk
kwhk

Registriert seit: 25. Mär 2009
Ort: Dresden
168 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Kalenderwoche ermitteln

  Alt 30. Mai 2013, 12:49
Ganz so einfach ist das nicht, schon deshalb nicht, weil der 01.01.jjjj nicht unbedingt der Beginn der Woche 1 des Jahres jjjj sein muss. 2014 beginnt die Woche 1 am 30.12.2013, zumindest in Deutschland, wenn man sich mal darauf reduziert.
Die Woche 1 in Deutschland ist die, die den ersten Donnerstag enthält. http://de.wikipedia.org/wiki/Woche
Die Woche 1 in den USA ist die, die den 1. Januar enthält.
Ist der 01.01. ein Fr,Sa,So, beginnt die Woche 1 in Deutschland am folgenden Montag.
Ist der 01.01. ein Mo,Di,Mi,Do, beginnt die Woche 1 in Deutschland in dieser Woche, auch wenn davon noch ein paar Tage zum alten Jahr gehören (siehe Kalender 2014)
Man muss also zunächst ermitteln, zu welchem Wochentag der 01.01. des Ausgangsjahres gehört und danach bestimmen, an welchem Tag die Woche 1 des Ausgangsjahres beginnt, das kann u.U. auch ein Tag des Vorjahres sein, z.B.30.12.2013 = 1. Tag der Woche 1 von 2014.
Die Anzahl Wochen kann man mit 7 (Tage pro Woche) multiplizieren und zum Datum des ersten Tages der Woche 1 addieren. Aus dem dabei entstehenden Datum (1. Tag der gesuchten Woche) muss nun ähnlich wie vorher die Woche ermittelt werden.
Dazu zunächst das Datum der ersten Tages der Woche 1 ermitteln und dann die Tagesdifferenz zwischen 1.Tag Woche 1 und berechnetem Datum / 7 ergibt die gewünschte Woche.
Auch hier aufpassen, wenn das ermittelte Datum z.B. der 31.12.2013 ist, dann ist das die Woche 1 des Jahres 2014 !
Das Jahr des Datums des Wochenbeginns muss nicht das Jahr der zugehörogen Woche sein.
Beispiel 30.12.2013 gehört zur Woche 01-2014
Hartmut

Geändert von kwhk (30. Mai 2013 um 12:57 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz