Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Datums-Umwandlung (https://www.delphipraxis.net/210687-datums-umwandlung.html)

Arkar 27. Mai 2022 13:49

Datums-Umwandlung
 
Mein Titel sagt jetzt nicht sehr viel aus,
Ich bin eigentlich recht neu in der Delphi Programmierung daher kenne ich so einiges noch nicht so.

Habe lange Zeit in Python Programmiert, daher jetzt meine Frage:
In Python habe ich ein Datum bsp: 220531 mit folgenden code nach 2022/05/31 umgewandelt.
Code:
datetime.strptime(date_str, "%y%m%d").strftime('%Y/%m/%d')
Wie geht das eigentlich mit Delphi, ich habe es bisher so versucht. Doch da kommt von der Jahreszahl nur 31.05.0022 heraus statt 2022.
Gehe davon aus der er das Jahr nicht hinzufantasiert wie es python macht xD.

Code:
 
myStr := '220531';
myDate := EncodeDate(
  StrToInt(Copy(MyStr, 1, 2)),
  StrToInt(Copy(MyStr, 3, 2)),
  StrToInt(Copy(MyStr, 5, 2))
);
~.Caption:= FormatDateTime('dd.mm.yyyy', myDate);
Wie, bzw was muss ich machen das ich eine ähnliche Funktion in Delphi Bekomme wie ich es bei python genutzt habe!?

Über eure Hilfe/Tipps würde ich mich Freuen.

haentschman 27. Mai 2022 15:09

AW: Datums-Umwandlung
 
Moin...:P
Zitat:

Gehe davon aus der er das Jahr nicht hinzufantasiert wie es python macht xD.
...ja. :wink:
https://docwiki.embarcadero.com/Libr...ils.EncodeDate
Zitat:

Das Jahr muss im Bereich von 1 bis 9999 liegen.
Ist ja auch richtig. Die erste FDP Sitzung kann ja auch im Jahre 100 gewesen sein. :zwinker: :stupid:

Lösung:
https://docwiki.embarcadero.com/Libr...FormatSettings
https://docwiki.embarcadero.com/Libr...rCenturyWindow
Zitat:

Alle zuvor aus zwei Ziffern bestehenden Jahresangaben werden als zur nächsten Jahrhundert gehörend interpretiert
:thumb:

oder:
Sicherstellen das der String den Formatangaben des Systems entspricht.
https://docwiki.embarcadero.com/Libr....StrToDateTime
Zitat:

Der in S angegebene String muss das aktuell in der Systemsteuerung festgelegte Format haben. In Deutschland ist das Format normalerweise TT.MM.JJJJ HH:MM:SS. Die Angaben AM und PM sowie die Sekunden sind optional. Verwenden Sie das 24-Stunden-Format (7:45 PM entspricht dann 19:45), wenn AM oder PM nicht angegeben wird.
:warn:
Intern, Code/DB, sollte immer mit TDateTime = Double benutzt werden. Für die Ausgabe, XML Export, CSV Export oder für Textimporte kann/muß man das umwandeln. :zwinker:


Willkommen...:dp:

himitsu 27. Mai 2022 15:23

AW: Datums-Umwandlung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Referenz durchsuchenStrToDate mit einem passenden FormatSetting. (aber ohne Sturmgewehr, ob das auch funktioniert, wenn keine Trennzeichen dazwischen sind)


Es ist im Windows irgendwo eingestellt, welches Jahr als Grenze gilt.

Aktuell liegt die Grenze noch bei 50 (ich denke mal in den nächsten 20 Jahren wird das auf 75, bzw. bald sogar auf 00 verschoben ... jedenfalls wäre es intelligent, wenn es so wird)
Nachlesen kannst du es in Delphi-Referenz durchsuchenTFormatSettings.TwoDigitYearCenturyWindow (du kannst es da auch für dein Programm ändern)
oder in den Datumseinstellungen im Windows (oder global für alle Programme ändern)
Anhang 55116


Und das mit % kann sowieso nicht funktionieren, denn wie formatiert es Delphi/Windows?
https://docwiki.embarcadero.com/Libr...FormatDateTime
https://docs.microsoft.com/de-de/dot...format-strings

Früher war es mal so, dass Delphi garkeine beliebigen FormatStrings als Quelle verwenden konnte,
aber angeblich wurde das zuletzt nun endlich mal repariert.

Niemand hat Extended zu verwenden ... das war niemals zur direkten Verwendung/Speicherung vorgesehn
und spätestens wenn du irgendwas kompilierst, was nicht Win32 ist, bist du angearscht.
Außerdem Delphi-Referenz durchsuchenTDateTime = Double

TurboMagic 27. Mai 2022 15:56

AW: Datums-Umwandlung
 
Ja, TDateTime ist intern ein Double also ein 64 Bit Floating Point Wert, bei dem der Ganzzahlteil
die Tage seit 30.12.1899 sind und der fraktionale Teil die Uhrzeit innerhalb des Tages darstellt.

Extended ist ein 80 Bit Fließkommatyp, den es gibt weil Delphi die interne Register Repräsentation
der Intel x87 FPU Register mittels diesem Typ verfügbar macht. Wer höhere Präzission braucht kann also
diesen Datenfyp für seine Berechnungen benutzen. Allerdings hat Himisu recht: das geht nur unter Win32.

Auf anderen Plattformen werden Fließkommazahlen evtl. ganz anders intern behandelt und bei Win64 gab's
damals die Auswahl entweder ASM Routinen im Code benutzen zu können (nein, nicht Inline, aber zumindest
als ganze Prozedur oder Methode) oder 80 Bit Extended unterstützt zu bekommen. Die Entscheidung fiel
zugunsten ASM aus... Somit gibt es auf anderen Plattformen zwar einen Datentyp Extended, aber nur als
Alias für Double...

Grüße
TurboMagic

Arkar 27. Mai 2022 16:03

AW: Datums-Umwandlung
 
Danke erstmal xD
Zitat:

Zitat von haentschman (Beitrag 1506420)
Moin...:P
Zitat:

Gehe davon aus der er das Jahr nicht hinzufantasiert wie es python macht xD.
...ja. :wink:
https://docwiki.embarcadero.com/Libr...ils.EncodeDate
Zitat:

Das Jahr muss im Bereich von 1 bis 9999 liegen.
Ist ja auch richtig. Die erste FDP Sitzung kann ja auch im Jahre 100 gewesen sein. :zwinker: :stupid:

Lösung:
https://docwiki.embarcadero.com/Libr...FormatSettings
https://docwiki.embarcadero.com/Libr...rCenturyWindow
Zitat:

Alle zuvor aus zwei Ziffern bestehenden Jahresangaben werden als zur nächsten Jahrhundert gehörend interpretiert
:thumb:

oder:
Sicherstellen das der String den Formatangaben des Systems entspricht.
https://docwiki.embarcadero.com/Libr....StrToDateTime
Zitat:

Der in S angegebene String muss das aktuell in der Systemsteuerung festgelegte Format haben. In Deutschland ist das Format normalerweise TT.MM.JJJJ HH:MM:SS. Die Angaben AM und PM sowie die Sekunden sind optional. Verwenden Sie das 24-Stunden-Format (7:45 PM entspricht dann 19:45), wenn AM oder PM nicht angegeben wird.
:warn:
Intern, Code/DB, sollte immer mit TDateTime = Double benutzt werden. Für die Ausgabe, XML Export, CSV Export oder für Textimporte kann/muß man das umwandeln. :zwinker:


Willkommen...:dp:

Also mir ging es eigentlich nur darum das ich die Jahrtausend dazu bekomme ob da jetzt ein % vor dem format setting steht ist mir eigentlich egal ^^ mir ging es um das ergebnis.
Aber danke dennoch da muss ich mich erstmal einlesen.

Gegen das herkunftsformat kann ich nichts ausrichten das ist in einer datamatrix so hinterlegt.
Da wurden keine Trennzeichen eingebettet daher ja auch meine Frage ^^ in python ist das ja einfach in Delphi scheint es etwas aufwendiger zu sein.

Delphi.Narium 27. Mai 2022 16:39

AW: Datums-Umwandlung
 
Delphi-Quellcode:
var
  myStr : String;
  myDate : String;
  dt : TDateTime;
begin
  // Wenn's Datum immer so kommt und es für die nächsten knapp 78 Jahre ausreicht, geht es auch so:
  myStr  := '220531';
  myDate := Format('%s.%s.20%s',[Copy(myStr, 5, 2),Copy(myStr, 3, 2),Copy(myStr, 1, 2)]);
  Caption := myDate;
  // Wenn man es dann auch noch als Datum benötigt:
  dt := StrToDate(myDate);
end;

mytbo 27. Mai 2022 17:33

AW: Datums-Umwandlung
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1506429)
Delphi-Quellcode:
var
  myStr : String;
  myDate : String;
  dt : TDateTime;
begin
  // Wenn's Datum immer so kommt und es für die nächsten knapp 78 Jahre ausreicht, geht es auch so:
  myStr  := '220531';
  myDate := Format('%s.%s.20%s',[Copy(myStr, 5, 2),Copy(myStr, 3, 2),Copy(myStr, 1, 2)]);
  Caption := myDate;
  // Wenn man es dann auch noch als Datum benötigt:
  dt := StrToDate(myDate);
end;

Oder wenn du dir die String-Kopiererei sparen willst (und alle Bedingungen sind erfüllt!):
Delphi-Quellcode:
var
  p: PChar;
begin
  date_str := '220531';
  p := PChar(date_str);
  ShowMessage(Format('%.2s.%.2s.20%.2s', [(p + 4), (p + 2), p]));
Bis bald...
Thomas

Arkar 27. Mai 2022 22:46

AW: Datums-Umwandlung
 
Hey danke euch :shock:,
an das direkte Formatieren des strings hab ich nicht gedacht.


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