Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   *UPDATE* ddd (Dayname) vergleichen der Date() Funktion (https://www.delphipraxis.net/158023-%2Aupdate%2A-ddd-dayname-vergleichen-der-date-funktion.html)

Mike_ 2. Feb 2011 14:59

Delphi-Version: 2007

*UPDATE* ddd (Dayname) vergleichen der Date() Funktion
 
Hallo liebe Delphianer,

ich benötige einen Datumsvergleich, wobei ich abfrage ob Mo/Di/Mi/Do/Fr/Sa/So ist.


Die SuFu hat mir sehr weitergeholfen, so dass ich u.a. auf folgendes gestoßen bin:
http://www.delphipraxis.net/28779-da...rgleichen.html

Allerdings fand ich keine Einträge wo der Wochentagsname verglichen wird.

Derzeitiger Stand:

Delphi-Quellcode:
curr_date := FormatDateTime('ddd', date); //Liefer Mo/Di etc zurück
if curr_date = 'Di' then [...]
Meiner Meinung nach ist das aber eher schlecht geeignet, da ich 1.) nicht weiß ob wirklich Mo/Di/Mi angezeigt wird oder Mon/Die/Mi/Do/Fr/So/Sa (Im Link von oben steht z.B. für Montag Mon)


Also zu den 2 Fragen:

1.) Kann ich den Wochentag als Index holen (z.B. So = 0, Mo =1 etc) ?
2.) Kann man den Wochentag und die Uhrzeit in eine Variable holen UND vergleichen ?
(z.B. curr_date = 'Di' AND curr_date between (08:00, 20:00)

Danke im voraus fürs durchlesen und "Kopf machen" :wink:

DeddyH 2. Feb 2011 15:11

AW: ddd (Dayname) vergleichen der Date() Funktion
 
Zu 1) DateUtils.DayOfTheWeek
Zu 2) habe ich leider nicht verstanden :(

generic 2. Feb 2011 15:16

AW: ddd (Dayname) vergleichen der Date() Funktion
 
Zu 1)
Es gibt DayOfWeek:
Delphi-Quellcode:
function DayOfWeek(const DateTime: TDateTime): Word;


Zu 2)
Der Uhrzeitanteil in TDatetime ist in dem Nachkommateil gespeichert.
Also den Vorkommateil abschneiden (mit Frac) und dann mit der Uhrzeit vergleichen.

Gerade gefunden:
Delphi-Quellcode:
function TimeOf(const AValue: TDateTime): TDateTime;

Nutzt aber die besagte Frac()

gibt da noch HoursBetween, MinutesBetween.

Mike_ 2. Feb 2011 15:48

AW: ddd (Dayname) vergleichen der Date() Funktion
 
Zitat:

Zitat von generic (Beitrag 1079124)
Zu 1)
Es gibt DayOfWeek:
Delphi-Quellcode:
function DayOfWeek(const DateTime: TDateTime): Word;


Zu 2)
Der Uhrzeitanteil in TDatetime ist in dem Nachkommateil gespeichert.
Also den Vorkommateil abschneiden (mit Frac) und dann mit der Uhrzeit vergleichen.

Gerade gefunden:
Delphi-Quellcode:
function TimeOf(const AValue: TDateTime): TDateTime;

Nutzt aber die besagte Frac()

gibt da noch HoursBetween, MinutesBetween.

Super genau das brauchte ich :)

Gibt es die Möglichkeit einer If Abfrage mehrere Abfragewerte zuzuordnen ohne das Statement immer wiederholen zu müssen ?

Beispiel:

Bad:
if dayofweek_curr = 1 or dayofweek_curr = 2
[...]


Good:
if dayofweek_curr = (1 or 2)


Das "Good" klappt aber leider nicht... gibt es solch eine Möglichkeit ?


EDIT://

dayofweek_curr := DayOfWeek(date);

if (dayofweek_curr = 3 OR 4 OR 5 OR 6) then ...

klappt auch nicht in der If Abfrage...

DeddyH 2. Feb 2011 15:51

AW: ddd (Dayname) vergleichen der Date() Funktion
 
Delphi-Quellcode:
case dayofweek_curr of
  1,2: Machwas;
    3: MachWasAnderes;
end;
[edit] :shock: Du weißt aber, was beim Verodern herauskommt? 3 OR 4 OR 5 OR 6 = 7 [/edit]

Mike_ 2. Feb 2011 16:00

AW: ddd (Dayname) vergleichen der Date() Funktion
 
Zitat:

Zitat von DeddyH (Beitrag 1079128)
Delphi-Quellcode:
case dayofweek_curr of
  1,2: Machwas;
    3: MachWasAnderes;
end;
[edit] :shock: Du weißt aber, was beim Verodern herauskommt? 3 OR 4 OR 5 OR 6 = 7 [/edit]

Das kommt davon, wenn man zu "verifft" ist :oops:

Vergisst man die Hälfte...


___

HoursBetween war nicht gemeint sondern die Methode um die jetzige Uhrzeit zu überprüfen z.B.

if time < 08:00:00
bin gerad fleißig am googlen gibt da ja einiges..

generic 2. Feb 2011 16:33

AW: *UPDATE* ddd (Dayname) vergleichen der Date() Funktion
 
Es gibt den "in" Befehl.


Delphi-Quellcode:
if var in [1..3,6] then
ist var zwischen 1 und 3 oder 6


Das ist gefährlich:
Delphi-Quellcode:
if dayofweek_curr = (1 or 2)

Denn 1 or 2 ist eine Binäroperation welche 3 ergibt.

Da steht also:
Delphi-Quellcode:
if dayofweek_curr = 3

DeddyH 2. Feb 2011 16:41

AW: *UPDATE* ddd (Dayname) vergleichen der Date() Funktion
 
Und für die Uhrzeit kannst Du DecodeTime nehmen und schauen, ob Hour < 8 ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:22 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