Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Datum umwandeln.. (https://www.delphipraxis.net/156577-datum-umwandeln.html)

Metallicwar 7. Dez 2010 18:45

Datum umwandeln..
 
Hallo zusammen, weiß nicht wie ich mein momentanes Problem lösen kann.
Folgendes..
Habe zwei Projektkonstanten die öfters verwendet werden z.B. in ShowMessages.
Delphi-Quellcode:
 
  SDatumVon0101 = 'Datum von: 01.01.';
  SBis3112 = 'bis 31.12.';
....

Delphi-Quellcode:
  lbPrjDatumAlt.Caption := SDatumVon0101 + IntToStr(year) + #13#10 + '      ' +
                           SBis3112 + IntToStr(year);
Das ist aber logischerweiße nur korrekt, wenn das Datumsformat auf dd.MM.yyyy steht.

An anderen Stellen kann ich das Datum ohne Probleme anpassen.
Delphi-Quellcode:
        qJahresplan.SQL.Text := 'INSERT INTO Jahresplan (Startdatum, Enddatum) VALUES (' +
                                QuotedStr(DateToStr(EncodeDate(year,10,01))) + ',' +
                                QuotedStr(DateToStr(EncodeDate(year,12,31))) + ')';
...
Aber wie könnte ich das Datum der Projektkonstanten ändern?!? z.B. auf T.M.JJ oder ein anderes?
Hoffe ihr versteht mein Problem

mfg David

mkinzler 7. Dez 2010 18:55

AW: Datum umwandeln..
 
Verwende bei SQL-Abfragen am Besten Parameter

haentschman 7. Dez 2010 19:00

AW: Datum umwandeln..
 
Hallo...

Idee aus dem Bauch: Statt Konstante als Variable und via DateUtils beim Start des Programmes entsprechend der Systemeinstellungen setzen.

Metallicwar 7. Dez 2010 19:13

AW: Datum umwandeln..
 
Das mit dem datum hab ich so gemacht:
Delphi-Quellcode:
procedure TfrmUmwandeln.FormShow(Sender: TObject);
var
  fs: TFormatSettings;
begin
  GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT,fs);
  if not (AdsSettings1.DateFormat = fs.ShortDateFormat) then
    AdsSettings1.DateFormat:= fs.ShortDateFormat;
Zitat:

Statt Konstante als Variable und via DateUtils beim Start des Programmes entsprechend der Systemeinstellungen setzen.
aber da steh ich jetzte auf`m Schlauch.
mfg

himitsu 7. Dez 2010 19:34

AW: Datum umwandeln..
 
Delphi-Quellcode:
const SDatum = 'Datum von: %s bis %s';
und dann vor Ort über Delphi-Referenz durchsuchenFormat beide Teile ersetzen.

Wobei für SQL dieses auch in etwa damit
Delphi-Quellcode:
const SDatum = 'Datum von: :VON bis :BIS';
und über dieses die predefinierten Parameter machen könnte, wie schon bei "Verwende bei SQL-Abfragen am Besten Parameter" vorgeschlagen.

In beiden Fällen dann den ganzen String über DateToStr + EncodeDate befüllen.

Metallicwar 7. Dez 2010 19:48

AW: Datum umwandeln..
 
Uff ^^
das mit dem Format, peil ich schon nicht... :(
war auf http://www.delphibasics.co.uk/RTL.asp?Name=Format und hab da nochmal gekuckt, aber dort werden keine Datumsdatentypen aufgelistet ?!?
d = Decimal (integer)
e = Scientific
f = Fixed
g = General
m = Money
n = Number (floating)
p = Pointer
s = String
u = Unsigned decimal
x = Hexadecimal

Also erst die Parameter mit Format füllen (was ich nicht verstehe) ^^ und dann eben diese zwei Parameter über DateToStr und EncodeDate befüllen?!?
Vll nen kleines Beispiel, an dem ich mich orientieren kann?

Whookie 7. Dez 2010 19:56

AW: Datum umwandeln..
 
Such mal nach FormatDateTime (SysUtils) in Deiner lokalen Hilfe ...

mkinzler 7. Dez 2010 20:00

AW: Datum umwandeln..
 
Das sind 2 Dinge; Format für Anzeigestrings und der Parameter bei SQL-Abfragen

Delphi-Quellcode:
var
    von, bis: TDate;
...
  von := EcodeDate( jahr, 1, 1);
  bis := EncodeDate ( Jahr, 12, 31);
  ...
  anzeige := 'Von ' + FormatDateTime( 'dd.mm.yyyy', von) + ' bis ' + FormatDateTime( 'dd.mm.yyyy', bis);

  qJahresplan.SQL.Text := 'INSERT INTO Jahresplan (Startdatum, Enddatum) VALUES ( :start, :ende)';
  qJahresplan.ParamByName('start').Value := von;
  qJahresplan.ParamByName('end').Value := bis;
  ...

himitsu 7. Dez 2010 20:30

AW: Datum umwandeln..
 
Delphi-Quellcode:
SDatumVon := 'von ';
SDatumBis := ' bis ';
Anzeige := SDatumVon + DateToStr(von) + SDatumBis + DateToStr(bis);


SDatum := 'von %s bis %s';
Anzeige := Format(SDatum, [DateToStr(von), DateToStr(bis)]);
So schwer ist ds doch eigentlich nicht?

Metallicwar 7. Dez 2010 22:31

AW: Datum umwandeln..
 
Delphi-Quellcode:
const
  SDatumVon = '01.01.';
  SDatumBis = '31.12.';
procedure TForm1.Button1Click(Sender: TObject);
var
  jahr: Word;
  von, bis: TDate;
  Anzeige: String;
  SDatum: String;
begin
  von := EncodeDate( jahr, 1, 1);
  bis := EncodeDate ( Jahr, 12, 31);

  anzeige := 'Von ' + FormatDateTime( 'dd.mm.yyyy', von) + ' bis ' + FormatDateTime( 'dd.mm.yyyy', bis);

  SDatumVon := 'von '; //<-- Der linken Seite kann nichts zugewiesern werden
  SDatumBis := ' bis ';
  Anzeige := SDatumVon + DateToStr(von) + SDatumBis + DateToStr(bis);
  SDatum := 'von %s bis %s';
  Anzeige := Format(SDatum, [DateToStr(von), DateToStr(bis)]);
  ShowMessage(Anzeige);
end;
Als Projektkonstanten hab ich ja schon SDatumVon, SDAtumBis die einen festen Wert haben. Logisch dass diesen Konstanten keine anderen Werte zugeordnet werden können.

Entferne ich diese Projektkonstanten und deklariere sie als einfache Stringvariable

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  jahr: Word;
  von, bis: TDate;
  Anzeige: String;
  SDatum: String;
  sDatumVon, SDatumBis: String;
begin
  von := EncodeDate( jahr, 1, 1); // --> Ungültiges Argument zum Codieren des Datums.
  bis := EncodeDate ( Jahr, 12, 31);

  anzeige := 'Von ' + FormatDateTime( 'dd.mm.yyyy', von) + ' bis ' + FormatDateTime( 'dd.mm.yyyy', bis);

  SDatumVon := 'von ';
  SDatumBis := ' bis ';
  Anzeige := SDatumVon + DateToStr(von) + SDatumBis + DateToStr(bis);
  SDatum := 'von %s bis %s';
  Anzeige := Format(SDatum, [DateToStr(von), DateToStr(bis)]);
  ShowMessage(Anzeige);
end;
What am I doing wrong?


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:19 Uhr.
Seite 1 von 2  1 2      

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