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 2 von 5     12 34     Letzte »    
Benutzerbild von DeddyH
DeddyH

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

AW: Datum letzter Samstag?

  Alt 23. Jul 2014, 15:45
DayOfTheWeek gibt es sehr wohl:
Zitat:
Hinweis: DayOfTheWeek ist ISO 8601-konform (Montag ist der erste Wochentag). Die Funktion DayOfWeek basiert dagegen auf dem Sonntag als erstem Wochentag.
Und schon ist das erklärt.
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
Benutzerbild von himitsu
himitsu

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

AW: Datum letzter Samstag?

  Alt 23. Jul 2014, 15:46
Jupp, drumm hatte ich auch beide Funktionen erwähnt und verlinkt.

Wennde die noch für 64-bit schreibst, dann bekommste auch nen Fleißbienchen in dein Aufgabenheft:
ARM (iOS, Android), Mac und Linux nicht vergessen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#13

AW: Datum letzter Samstag?

  Alt 23. Jul 2014, 15:47
Aus der OH:

Zitat:
DayOfWeek gibt den Wochentag zum angegebenen Datum als Integer zwischen 1 und 7 zurück. Dabei ist Sonntag Tag 1 und Samstag Tag 7.
Hinweis:
DayOfWeek ist nicht mit dem ISO 8601-Standard konform, in dem Montag als der erste Tag der Woche definiert wird. Die Funktion DayOfTheWeek stimmt mit dem ISO 8601-Standard überein.
Kommt drauf an wie man es sieht

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#14

AW: Datum letzter Samstag?

  Alt 23. Jul 2014, 15:53
Off-By-One Fehler.. na und
Edit: Tut im Grunde genau #3 hab mich nur um "1" vertan
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG

Geändert von Aphton (23. Jul 2014 um 15:56 Uhr)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#15

AW: Datum letzter Samstag?

  Alt 23. Jul 2014, 16:00
result := Date - DayOfWeek(Date);
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).

Alternative: ISO-8601-Routine verwenden;
Delphi-Quellcode:
function LastSaturday (aDate : TDateTime) : TDateTime;
Var
  LastSunday : TDateTime;
Begin
  LastSunday := EndOfTheWeek(aDate-7);
  Result := LastSunday - 1;
End;
Laut ISO ist der letzte Tag der Woche der Sonntag. Und die ISO ändert sich nicht, außer bei Übernahme durch Außerirdische/Nordkorea.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

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

AW: Datum letzter Samstag?

  Alt 23. Jul 2014, 16:05
Jupp, drumm hatte ich auch beide Funktionen erwähnt und verlinkt.

Wennde die noch für 64-bit schreibst, dann bekommste auch nen Fleißbienchen in dein Aufgabenheft:
ARM (iOS, Android), Mac und Linux nicht vergessen.
Das wär die Bonusaufgabe für Streber gewesen

P.S. Die Lösung von Uwe in ne Methode verpackt (wenn man will noch nen inline dran geklatscht) ist sogar ein paar Ticks schneller als die asm Implementierung. Soviel zu "ick schreib det ma in assembla, det is schnella"

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.
Das ist fast genauso wahrscheinlich wie eine "Übernahme durch Außerirdische/Nordkorea."

Delphi-Quellcode:
function LastSaturday (aDate : TDateTime) : TDateTime;
Var
  LastSunday : TDateTime;
Begin
  LastSunday := EndOfTheWeek(aDate-7);
  Result := LastSunday - 1;
End;
EndOfTheWeek ruft übrigens StartOfTheWeek auf, was wiederrum DayOfTheWeek aufruft.
Dann doch lieber gleich:
Delphi-Quellcode:
function LastSaturday(aDate: TDateTime): TDateTime;
begin
  Result := aDate - DayOfTheWeek(aDate) - 1;
end;
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (23. Jul 2014 um 16:12 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Datum letzter Samstag?

  Alt 23. Jul 2014, 16:11
So als LastWeekDay/Next... (oder so) würde das auch gut in die DateUtils vom XE9 passen. (bzw. als Helper ans TDateTime dran)


Im Delphi gibt/gab es mal 3 Kodierungen, in verschiedenen Funktionen.

Kombinationen aus
1..7 oder 0..6
und
So..Sa oder Mo..So
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#18

AW: Datum letzter Samstag?

  Alt 23. Jul 2014, 16:17
...Ändert sich das irgendwann, funktioniert die Lösung nicht mehr. Das ist zwar unwahrscheinlich (das sich das ändert), aber denkbar.
Das ist fast genauso wahrscheinlich wie eine "Übernahme durch Außerirdische/Nordkorea."
Schön, das Du meine Anmerkung bestätigst. Es ist denkbar, und das reicht für mich als kleiner design flaw. Zudem ist der Code unverständlich (man muss das Manual/OH zitieren, um zu verstehen, was da abgeht). Die Schleife ist sofort durchschaubar, die ISO-Variante auch. Beides ist unwesentlich länger, ergo akzeptabel und eventuell zu bevorzugen.
EndOfTheWeek ruft übrigens StartOfTheWeek auf, was wiederrum DayOfTheWeek aufruft.
Dann doch lieber gleich:
Ich schlage mich nicht mit Implementierungsdetails einer API herum. Sie bietet mir 'EndOfTheWeek' und das verwende ich dann. Geht es um Nichtverwendung von API-Aufrufen oder um Verständnis des Codes? Sei wenigstens so konsequent und ersetze dann 'DayOfTheWeek' gleich durch den Formelsalat, der vermutlich dahintersteht?
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

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

AW: Datum letzter Samstag?

  Alt 23. Jul 2014, 22:36
Ich schlage mich nicht mit Implementierungsdetails einer API herum. Sie bietet mir 'EndOfTheWeek' und das verwende ich dann. Geht es um Nichtverwendung von API-Aufrufen oder um Verständnis des Codes? Sei wenigstens so konsequent und ersetze dann 'DayOfTheWeek' gleich durch den Formelsalat, der vermutlich dahintersteht?
Nu werd ma nich polemisch Man sollte schon verstehen, wie eine API funktioniert. DayOfTheWeek ist genauso Teil der API, wie EndOfTheWeek. Derjenige, der aber weiß, wie die API funktioniert und dass letztlich die DayOfTheWeek für die anderen Funktionen aufgerufen wird, kann dann direkt diese Funktion benutzen. Es war lediglich ein Hinweis, wie man das schmerzfrei optimieren kann, da ja bekannt ist, wie miserabel der Compiler (je nach Version) Float Results optimiert (bzw nicht).

Außerdem ist der Algorithmus:
- gib mir den Tag der Woche, wobei Montag 1 und Sonntag 7 ist und
- ziehe diesen vom Datum ab, das ergibt den letzten Sonntag,
- dann nochmal eins abziehen und ich hab den letzten Samstag

wohl kaum schwerer zu verstehen als:
- ziehe eine Woche vom Datum ab und
- gib mir davon den letzten Tag dieser Woche, das ergibt den letzten Sonntag,
- dann nochmal eins abziehen und ich hab den letzten Samstag
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Datum letzter Samstag?

  Alt 23. Jul 2014, 22:56
Außerdem ist der Algorithmus:
- gib mir den Tag der Woche, wobei Montag 1 und Sonntag 7 ist und
- ziehe diesen vom Datum ab, das ergibt den letzten Sonntag,
- dann nochmal eins abziehen und ich hab den letzten Samstag

wohl kaum schwerer zu verstehen als:
- ziehe eine Woche vom Datum ab und
- gib mir davon den letzten Tag dieser Woche, das ergibt den letzten Sonntag,
- dann nochmal eins abziehen und ich hab den letzten Samstag
Funktioniert leider beides nicht an einem Sonntag...
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    


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 08:02 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