AGB  ·  Datenschutz  ·  Impressum  







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

Datums-Umwandlung

Ein Thema von Arkar · begonnen am 27. Mai 2022 · letzter Beitrag vom 27. Mai 2022
Antwort Antwort
Arkar

Registriert seit: 1. Jul 2015
Ort: Bamberg
11 Beiträge
 
Delphi 11 Alexandria
 
#1

Datums-Umwandlung

  Alt 27. Mai 2022, 14:49
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.
Sven
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#2

AW: Datums-Umwandlung

  Alt 27. Mai 2022, 16:09
Moin...
Zitat:
Gehe davon aus der er das Jahr nicht hinzufantasiert wie es python macht xD.
...ja.
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.

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


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.

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.


Willkommen...

Geändert von haentschman (27. Mai 2022 um 16:34 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Datums-Umwandlung

  Alt 27. Mai 2022, 16:23
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)
twodigityear.jpg


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
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (27. Mai 2022 um 16:33 Uhr)
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.942 Beiträge
 
Delphi 12 Athens
 
#4

AW: Datums-Umwandlung

  Alt 27. Mai 2022, 16:56
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
  Mit Zitat antworten Zitat
Arkar

Registriert seit: 1. Jul 2015
Ort: Bamberg
11 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Datums-Umwandlung

  Alt 27. Mai 2022, 17:03
Danke erstmal xD
Moin...
Zitat:
Gehe davon aus der er das Jahr nicht hinzufantasiert wie es python macht xD.
...ja.
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.

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


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.

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.


Willkommen...
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.
Sven
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#6

AW: Datums-Umwandlung

  Alt 27. Mai 2022, 17:39
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;
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
472 Beiträge
 
#7

AW: Datums-Umwandlung

  Alt 27. Mai 2022, 18:33
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
  Mit Zitat antworten Zitat
Arkar

Registriert seit: 1. Jul 2015
Ort: Bamberg
11 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Datums-Umwandlung

  Alt 27. Mai 2022, 23:46
Hey danke euch ,
an das direkte Formatieren des strings hab ich nicht gedacht.
Sven
  Mit Zitat antworten Zitat
Antwort Antwort

 

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