AGB  ·  Datenschutz  ·  Impressum  







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

DateTimeToStr Konvertierungsproblem

Ein Thema von JonnyGuitar · begonnen am 6. Aug 2007 · letzter Beitrag vom 10. Aug 2007
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#11

Re: DateTimeToStr Konvertierungsproblem

  Alt 9. Aug 2007, 14:17
ich finde es auch einigermaßen einleuchtend das nach dem sperren die einstellungen aktuallisiert werden. Denn wenn man zum Beispiel per Remotedesktop zugreift nutzt man eventuell andere Spracheinstellungen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#12

Re: DateTimeToStr Konvertierungsproblem

  Alt 9. Aug 2007, 14:59
Zitat von JonnyGuitar:
... und zwar bekomme ich aus der registry einen string folgenden musters: '12.11.2007'.
Kommt nun drauf an, wer diesen Wert in die Registry schreibt/geschrieben hat.
Wenn du das bist, dann solltest du das Format ändern.
Entweder a.) das ISO 8601 Format verwenden oder b.) ein maschinenlesbares Format wie z.B. Anzahl der Tage seit dem 31.12.1899 verwenden.

Es gilt folgende Grundregel:
Niemals ein Datum / Uhrzeit so speichern, wie es dem Benutzer an der Oberfläche präsentiert wird!
Immer ein international anerkanntes Stringformat oder ein maschinenlesbares Format verwenden.

Variante b.) ist besonders einfach:
Delphi-Quellcode:
var
   datum : TDateTime;
begin
   ...
   datum := SysUtils.Date;
   Reg.WriteString('LastUpdate', IntToStr(Trunc(datum)));
   // Trunc schneidet den evtl. Zeitanteil ab
...
   datum := StrToFloat(Reg.ReadString('LastUpdate')); // und zurück lesen
Übrigens !!! Die Klasse TRegistry hat die Methoden ReadDate, WriteDate.
Damit wird ein Datum gleich binär in die Registry geschrieben/gelesen.
CPU-Belastung und Speicherverbrauch sind hier am Kleinsten.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von PinKing2
PinKing2

Registriert seit: 9. Aug 2007
29 Beiträge
 
#13

Re: DateTimeToStr Konvertierungsproblem

  Alt 10. Aug 2007, 07:47
Moin, moin

ich bin es noch einmal.

Ich hab die Sache jetzt dahin umgebogen, dass ich unabhängig von den
eingestellten Datums- und Uhrzeitformaten des PCs bin. Dazu habe ich
"StrToTimeDef" und "StrToDateDef" benutzt.

Allerdings bin ich jetzt auf eine Sache gestossen, die ich nicht
verstehe (muss dazu sagen, dass ich kein Profi in Sachen Programmierung
bin, sondern das eher als Hobby betreibe um nich ganz zu verblöden).

Folgenden Quellcode habe ich erstellt:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Datumsformat: TFormatSettings;
  Zeit1,Zeit2: TDateTime;

begin

  Datumsformat.DateSeparator:='-';
  Datumsformat.ShortDateFormat:='yyyy-dd-mm';
  Datumsformat.TimeSeparator:=':';
  Datumsformat.ShortTimeFormat:='HH:mm:ss';

  Memo1.Clear;

  Zeit1:=(StrToDateDef('2007-10-08', -10, Datumsformat) + StrToTimeDef('10:00:00', -10, Datumsformat));
  Zeit2:=(StrToDateDef('2007-10-08', -10, Datumsformat) + StrToTimeDef('10:00:00', -10, Datumsformat));

  if Zeit1 < Zeit2 then
    begin
      Memo1.Lines.Add('Zeit1 kleiner Zeit2'); //Dies wird nie erreicht
    end;

    if Zeit1 < (StrToDateDef('2007-10-08', -10, Datumsformat)+StrToTimeDef('10:00:00', -10, Datumsformat)) then
    begin
      Memo1.Lines.Add('Zeit1 kleiner Berechnung'); //Dies wird immer erreicht
      Memo1.Lines.Add('Aber warum???');
    end;

  Memo1.Lines.Add('');
  Memo1.Lines.Add('Kurzes Datumsformat PC: '+ShortDateFormat);
  Memo1.Lines.Add('Datumsseparator: '+DateSeparator);
end;
Zeit1 und Zeit2 sind identisch und die Abfrage Zeit1 kleiner Zeit2 wird auch übersprungen.
Warum aber ist bei der zweiten Abfrage mit der Berechnung statt Zeit2 die Zeit1 plötzlich kleiner ?


Kann mir das jemand erklären? Ich bin einigermassen ratlos...

Gruß, Andreas.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#14

Re: DateTimeToStr Konvertierungsproblem

  Alt 10. Aug 2007, 08:32
Hallo Andreas,

Datum und Zeit werden in Delphi (und nicht nur dort) als Bruchteile und Vielfache eines Tages gesehen und auf einen Gleitkommawert abgebildet. Beim Vergleich von zwei anscheinend gleich großen Gleitkommawerten treten fast regelmäßig Abbildungsprobleme bei den letzten Nachkommastellen der entsprechenden Zahlen auf, deshalb musst du entweder mit einer Epsilon-Schranke arbeiten oder vor dem Vergleich auf eine für deine Zwecke ausreichende Genauigkeit (Sekunden) umrechnen.

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von PinKing2
PinKing2

Registriert seit: 9. Aug 2007
29 Beiträge
 
#15

Re: DateTimeToStr Konvertierungsproblem

  Alt 10. Aug 2007, 11:07
Hallo marabu,

vielen Dank für Deine Antwort, dann ist das Ganze wohl ein Rundungsproblem.

Dank an alle, die geholfen haben.

Gruß, Andreas.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 13:09 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