AGB  ·  Datenschutz  ·  Impressum  







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

Datum letzter Samstag?

Ein Thema von AlexII · begonnen am 23. Jul 2014 · letzter Beitrag vom 24. Jul 2014
Antwort Antwort
Seite 3 von 5     123 45      
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.006 Beiträge
 
Delphi 12 Athens
 
#21

AW: Datum letzter Samstag?

  Alt 23. Jul 2014, 21:59
Um das nochmal zu verdeutlichen: Mein Einzeiler funktioniert nur deswegen, weil DayOfWeek für Sonntag 1 und Samstag 7 zurückgibt und weil nach dem letzten Samstag gefragt wurde. Bei Verwendung von DayOfTheWeek oder der Frage nach einem anderen Wochentag wird es ein klein wenig komplizierter.

Aber andererseits: Genau das war die Frage!
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#22

AW: Datum letzter Samstag?

  Alt 23. Jul 2014, 22:03
Man könnte auch einfach das Datum eines Referenzsamstags nehmen, die Differenz zum aktuellen Datum in Tagen bilden, durch 7 teilen, abrunden, und das Ergebnis wieder mit 7 multiplizieren.

Könnte höchstens mit Floating-Point-Ungenauigkeiten Probleme geben.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#23

AW: Datum letzter Samstag?

  Alt 23. Jul 2014, 22:05
Funktioniert leider beides nicht an einem Sonntag...
Haha, das passiert, wenn die eigtl richtige Antwort direkt am Anfang gegeben wird, irgendwer dran rummäkelt und man sich davon einfach blenden lässt und man das denken einstellt.

Tjo in dem Fall ist es wirklich eine glückliche Fügung, dass der Tag nach dem gewünschten eine 1 zurückliefert bei DayOfWeek
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Zoot

Registriert seit: 30. Jan 2006
Ort: Hessen
110 Beiträge
 
Delphi 11 Alexandria
 
#24

AW: Datum letzter Samstag?

  Alt 24. Jul 2014, 06:11
Eine schöne Lösung, die aber stillschweigend davon ausgeht, das der Samstag mit 7 kodiert wird. Ändert sich das irgendwann, funktioniert die Lösung nicht mehr. Das ist zwar unwahrscheinlich (das sich das ändert), aber denkbar. Zudem wird eine Portierung in eine andere Sprache hier vermutlich nicht funktionieren.

So schön, minimalistisch und elegant Uwes Lösung auch ist, ich würde vielleicht doch eine Schleife bevorzugen:
Delphi-Quellcode:
Function LastSaturday(Date : TDateTime) : TDateTime;
Const
  DaySaturday = 7;

Begin
  Result := Date - 1;
  While DayOfWeek(Result) <> DaySaturday do Result := Result - 1;
End;
Hier ist es vollkommen egal, was DayOfWeek liefert (enum, integer, string etc.) Die Version läuft immer und überall (solange es Samstage gibt).
Diese Version ist aber doch genauso abhängig davon, wie die Wochentage kodiert sind, da du nunmal DayOfWeek verwendest.
Liefert dieses für Samstag plötzlich 6 zurück, hast du ein Problem. Liefert es einen String, dann erst recht, dann meckert der Compiler.
Immer und Überall läuft das also nicht...
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#25

AW: Datum letzter Samstag?

  Alt 24. Jul 2014, 06:36
@Zoot

Gut gemerkt.

So wäre es richtig(er), da es sich auf ein dokumentiertes zugesichertes Verhalten verlässt, wo die zurückgelieferten Werte selber egal sind. Delphi-Referenz durchsuchenSystem.DateUtils.DayOfTheWeek

Egal welcher Wert für Samstag zurückgegeben wird, dieser Wert ist gleich dem Wert der Konstanten DaySaturday .

Delphi-Quellcode:
uses DateUtils;

Function LastSaturday(Date : TDateTime) : TDateTime;
Begin
  Result := Date - 1;
  While DayOfTheWeek(Result) <> DaySaturday do Result := Result - 1;
End;
Ich halte es aber für sehr unwahrscheinlich, dass sich die eine oder andere Funktion ändern wird
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (24. Jul 2014 um 06:49 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.132 Beiträge
 
Delphi 12 Athens
 
#26

AW: Datum letzter Samstag?

  Alt 24. Jul 2014, 07:21
Egal welcher Wert für Samstag zurückgegeben wird, dieser Wert ist gleich dem Wert der Konstanten DaySaturday .
Wobei man das, wie bereits erwähnt, dennoch mathematisch lösen kann.

Und gleichzeitig wird die Formel dann für alle Wochentage funktionieren. (wenn man nicht die speziell, für den Samstag, gekürzte Version verwendet)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Zoot

Registriert seit: 30. Jan 2006
Ort: Hessen
110 Beiträge
 
Delphi 11 Alexandria
 
#27

AW: Datum letzter Samstag?

  Alt 24. Jul 2014, 07:23
Noch ein Vorschlag ohne Schleife.

Delphi-Quellcode:
Function LastDow (const DateToMatch : TDateTime; const DowToMatch : Byte) : TDateTime;
begin
   result := DateToMatch - ((7 - DowToMatch + DayOfTheWeek(DateToMatch)) mod 7);
   if result = DateToMatch then
      result := result - 7;
end;
LastDow(Date, DayFriday) sollte dann den 18.7. ergeben.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#28

AW: Datum letzter Samstag?

  Alt 24. Jul 2014, 07:23
Egal welcher Wert für Samstag zurückgegeben wird, dieser Wert ist gleich dem Wert der Konstanten DaySaturday .
Wobei man das, wie bereits erwähnt, dennoch mathematisch lösen kann.

Und gleichzeitig wird die Formel dann für alle Wochentage funktionieren. (wenn man nicht die speziell, für den Samstag, gekürzte Version verwendet)
Ja, aber da wollte ich nicht weiter drauf eingehen
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.006 Beiträge
 
Delphi 12 Athens
 
#29

AW: Datum letzter Samstag?

  Alt 24. Jul 2014, 07:27
Ich halte es aber für sehr unwahrscheinlich, dass sich die eine oder andere Funktion ändern wird
Gerade Delphi ist in Bezug auf Abwärtskompatibilität ziemlich konservativ. Die Einführung von DayOfTheWeek als ISO-konformes Pendant zu DayOfWeek unterstreicht das nochmal.

Ich habe erst einmal erlebt, daß die RTL bei einem Delphi-Wechsel ein anderes Ergebnis lieferte: In Delphi 1 war TDate als die Anzahl der Tage seit dem 1.1.0001 definiert, später wurde das auf den 31.12.1899 geändert.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#30

AW: Datum letzter Samstag?

  Alt 24. Jul 2014, 07:49
dass so eine süße kleine Frage so viel Grundlage bietet, dass ich hier 29 Beiträge dazu lesen durfte.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 5     123 45      


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 01:37 Uhr.
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